为什么我的jQuery每个循环都没有正确添加值?

Bre*_*ett 3 javascript each jquery

我正在尝试获取几个字段的值并将它们添加到一起并且在我的测试中我遇到了问题.我有这个代码:

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

    });

}
Run Code Online (Sandbox Code Playgroud)

我在第一个字段中输入值"9",当第一个警报触发时,我得到"undefined9"; 所有其他值当前都设置为"0"; 当它再次触发时,我总是得到"undefined0".

为什么我得到"未定义"位?为什么它只返回当前字段的值而不是将它们一起添加?

ale*_*lex 6

您正在count为循环内部的值标注尺寸,实质上是undefined在每次迭代中将其设置为第一个.

你想删除var循环内.这样,它没有匿名函数的作用域,JavaScript将查看父函数的声明.

这个parseInt(count, 10)数字首先也是一个好主意,因为JavaScript会使+运算符重载算术加法和字符串连接,而你不希望count这样"0something".

最后,count += value更容易阅读:)

  • @Brett:`val()`返回字符串值,而不是数字.`parseInt()`接受一个字符串并将其解析为整数; 你的行会改为:`count + = parseInt(value,10);` (2认同)

Cam*_*ron 5

你不小心重新声明count:

var count = count + value;
Run Code Online (Sandbox Code Playgroud)

应该:

count = count + value;
Run Code Online (Sandbox Code Playgroud)

在最内层范围内声明的计数(其中calculate)将隐藏另一个(这称为变量的"阴影").

你得到"undefined9"的原因是因为新声明的count变量的默认值是undefined; 当你添加它时,它会undefined在左侧看到一个值,在右边看到一个数字,并确定字符串连接是执行加法的最佳方式,从而产生字符串"undefined9".

它必须猜测你的意图,因为+重载意味着数字加法和字符串连接; 在这种情况下,它猜错了.