2013-03-12 28 views
2

嗨我试图做拼字游戏。拼字游戏 - 与jquery一起添加字母的值

我想给每个字母一个值,然后将它们汇总在一起,如果输入框更改。

我已经有一个搜索,并发现如何总结变化的数字,但我真的很难找出如何用数字替换一个字母的值。下面是一些代码,我已经修改:

$(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”。目前,如果我把数字放在我得到的总数中,但我希望能够在方框1和方框2中放入'a'并获得总数4.

感谢您的帮助。

+0

目前,您如何将字母与值绑定?我可以为您提供解决方案,但我不确定它是否适用于您 – 2013-03-12 14:05:13

+0

我正在尝试使用关联数组来执行此操作,然后使用.each来遍历。任何解决方案都会有所帮助:) – 2013-03-12 14:11:03

回答

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/

+0

非常感谢您 - 我从来没有想过这样做! – 2013-03-12 14:41:35

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语句:

return dictionary[letter]; 

,没有循环需要

+0

感谢您的快速响应 - 非常感谢您的帮助:D – 2013-03-12 14:42:18