Почему каждый цикл jQuery неправильно добавляет значения? - PullRequest
3 голосов
/ 14 марта 2011

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

var count;

function calculate() {

    // Fix jQuery conflicts
    jQuery.noConflict();

    count = 0;

    jQuery('.calculate').each(function() {

        var currentElement = jQuery(this);

        var value = currentElement.val();

        var count = count + value;

        alert(count);

    });

}

Я ввожу значение «9» в своем первом поле, и когда срабатывает первый сигнал, я получаю «undefined9»; все остальные значения в настоящее время установлены на «0»; когда это срабатывает снова, я всегда получаю "undefined0".

Почему я получаю "неопределенный" бит и почему он только возвращает значение текущего поля и не складывает их вместе?

Ответы [ 3 ]

6 голосов
/ 14 марта 2011

Вы измеряете значение count внутри цикла, по существу устанавливая его на undefined первым в каждой итерации.

Вы хотите удалить var внутри цикла.Таким образом, у нее нет области действия для анонимной функции, и JavaScript будет искать родительскую функцию для ее объявления.

Также может быть хорошей идеей сначала набрать parseInt(count, 10) число, потому что JavaScript перегружаетОператор + означает арифметическое сложение и конкатенацию строк, и вы не хотели бы, чтобы count было "0something".

Наконец, count += value легче читать:)

5 голосов
/ 14 марта 2011

Вы случайно повторно объявляете count:

var count = count + value;

должно быть:

count = count + value;

Количество, объявленное в самой внутренней области (то есть calculate) скроет другую (это называется «затенением» переменных).

Причина, по которой вы получаете «undefined9», заключается в том, что значение по умолчанию для вновь объявленной переменной count равно undefined;когда вы добавляете к нему, он видит значение undefined слева и число справа и решает, что объединение строк - лучший способ выполнить сложение, в результате чего получается строка «undefined9».

Он должен угадать ваше предполагаемое значение, поскольку + перегружен, чтобы означать как числовое сложение, так и конкатенацию строк;в этом случае он угадывает неправильно.

0 голосов
/ 14 марта 2011

Вы определяете счет в двух разных областях - функцию вычисления, а затем в функции, которую использует каждая. Возможно, вы захотите, чтобы второй счет назывался как-то иначе, или, по крайней мере, не объявляйте его заново.

...