2

嗨,我正在尝试制作一个拼字游戏。

如果输入框发生变化,我想给每个字母一个值,然后将它们加在一起。

我进行了搜索并找到了如何对变化的数字求和,但我真的很难弄清楚如何用数字替换字母的值。这是我修改的一些代码:

$(document).on("change", "input[id ^= 'r1box']", function() {

    var sum = 0;

    $("input[id ^= 'r1box']").each(function(){
        sum += +$(this).val();
    });

    $("#r1totbox_id").val(sum);
});

我有 7 个 id 以“r1box”开头的盒子,然后是一个 id 为“r1totbox_id”的盒子。目前,如果我输入数字,我会得到一个总数,但我希望能够将“a”放入框 1,将“b”放入框 2,总共得到 4。

谢谢你的帮助。

4

2 回答 2

0
var convert_letters_to_numbers(letter) {
    letter = letter.toLowerCase(); //this prevents any case-sensitive problem
    if (letter == 'a') return 1;
    ...
    /* etc etc etc */
}

然后,在您的代码中:

sum += convert_letters_to_numbers($(this).val());   

这假设您将在每场比赛中使用相同的值。如果你想让它动态化,你应该添加一个映射字典(或者更好的是一个 json 对象,这样你就可以在其他地方生成它们)

var mapping_array = new Array();
mapping_array['a'] = 3;
mapping_array['b'] = 1;
....

然后遍历它并返回相应的值

与您的最后评论:

var dictionary = {"a":1, "b":2};

你的转换函数应该只做一个简单的返回语句:

return dictionary[letter];

并且不需要循环

于 2013-03-12T14:09:58.383 回答
0

您需要一个将字母映射到拼字游戏点值的数组(Source):

var points = [1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10];

然后您可以获取输入并将其与正确的点值匹配,方法是转换为大写并从 ASCII 码值中减去 65 (A) 以获得点数组的索引:

var letter = $(this).val().toUpperCase();
if (letter.length == 1) {
    var letterIndex = letter.charCodeAt(0) - 65;
    sum += points[letterIndex];
}

演示:http: //jsfiddle.net/Cp3Fd/

于 2013-03-12T14:11:26.240 回答