2013-03-12 4 views
2

Привет, я пытаюсь сделать игривую игру.Scrabble - добавляет значения букв вместе с jquery

Я хочу дать каждой букве значение, а затем суммировать их вместе, если поле ввода изменится.

У меня был поиск, и я нашел, как суммировать числа при изменении, но я действительно пытаюсь выяснить, как заменить значение буквы числом. Вот код, который я модифицирована:

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

    var sum = 0; 

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

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

У меня есть 7 ящиков, идентификатор начинается с «r1box», а затем в общей коробке с идентификатором «r1totbox_id». На данный момент, если я положу цифры, я получаю общее количество, но я хотел бы иметь возможность поставить «a» в поле 1 и «b» в поле 2 и получить в общей сложности 4.

Спасибо вам за помощь.

+0

как вы связываете буквы со значениями, на данный момент? Я могу предоставить вам решение, но я не уверен, что он работает для вас. –

+0

Я пытаюсь сделать это с помощью ассоциативного массива прямо сейчас, используя .each для итерации. Любое решение поможет :) –

ответ

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]; 

Затем вы можете взять вход и сравнить его с правильным значением точки, путем преобразования в прописные и вычитая 65 (A) от значения ASCII кода, чтобы получить индекс в массиве точек:

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

Демо: http://jsfiddle.net/Cp3Fd/

+0

Большое вам спасибо - я никогда не думал, что так делаю! –

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]; 

и не зацикливание требуется

+0

Спасибо за ваш быстрый ответ - очень ценю вашу помощь: D –

Смежные вопросы