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

时间:2011-03-13 23:35:44

标签: javascript jquery each

我试图获得几个领域的价值。将它们加在一起&在我的测试中,我遇到了问题。我有这段代码:

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 个答案:

答案 0 :(得分:6)

您正在标注循环内的count值,实质上是在每次迭代中将其设置为undefined

您想删除循环中的var。这样,它就没有匿名函数的作用域,JavaScript将查看父函数的声明。

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

最后,{{1}}更容易理解:)

答案 1 :(得分:5)

您不小心重新声明了count

var count = count + value;

应该是:

count = count + value;

在最内部范围(calculate)中声明的计数将隐藏另一个(这称为变量的“阴影”)。

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

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

答案 2 :(得分:0)

您在两个不同的范围中定义计数 - 计算函数,然后在每个范围内使用的函数中。您可能希望将第二个计数命名为其他内容,或者至少不重新声明它。