我遇到了一些奇怪的事情,请参阅下文。为什么警报1输出0但警报2输出正确的总和?它们也是一样的......
var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val());
//tb1.val() == 3, tb2.val() == 5;
1) alert(sumTotal); //Outputs 0;
2) alert(parseFloat($('#tb1').val()) + parseFloat($('#tb2').val())); //Outputs 8;
确切代码:
$(document).ready(function () {
var koh = 1;
var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val());
window.setInterval(function () {
// correct value
tb3.val(parseFloat($('#tb1').val()) + parseFloat($('#tb2').val()));
tb3.val(parseFloat(sumTotal)); // 0
tb3.val(sumTotal); // 0
tb3.val(koh++) //increments +1
}, 2500);
})
因为koh增加+1这仍然是一个范围问题吗?
答案 0 :(得分:1)
sumTotal在文本框的值更改之前计算。如果它们默认为0,则结果将为0,即使文本框的值为,也不会更改。
如果它们默认为空白,则sumTotal为NaN - 它仍然不会更改。
答案 1 :(得分:0)
尝试删除对parseFloat
的调用,这一行
tb3.val(parseFloat(sumTotal));
变为
tb3.val(sumTotal);
事实上,sumTotal
已经是一个浮点数(你在求和之前已经转换了它):
var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val());
并在浮点值上使用parseFloat
可能会导致未定义的行为。
我想我发现了它:文本框中的值是用html预填充的吗?
如果文本框为空或此时包含0
var sumTotal = parseFloat($('#tb1').val()) + parseFloat($('#tb2').val());
存储在sumTotal中的值将分别为NaN或0(感谢cHao指出这一点)并且从那时起它不会改变:记住语句tb3.val(sumTotal);
不会重新评估{{ 1}}。
如果您想更新用户输入的总和,您需要以下内容:
sumTotal