将var设置为两个文本框值之和为0,怎么样?

时间:2010-08-17 17:21:55

标签: javascript jquery

我遇到了一些奇怪的事情,请参阅下文。为什么警报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这仍然是一个范围问题吗?

2 个答案:

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