我试图获得几个领域的价值。将它们加在一起&在我的测试中,我遇到了问题。我有这段代码:
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”。
为什么我得到“未定义”位&为什么它只返回当前字段的值&不加在一起?
答案 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)
您在两个不同的范围中定义计数 - 计算函数,然后在每个范围内使用的函数中。您可能希望将第二个计数命名为其他内容,或者至少不重新声明它。