2

这是我在所有文本框中添加时的代码,它工作正常,但在删除数字后它显示 NaN:

function sumVal()
{
    var total = 0;
    var coll = document.getElementsByTagName("input")
    for ( var i = 0; i<coll.length; i++)
    {
        var ele = coll[i];
        total += parseInt(ele.value);
    }
    var Display = document.getElementById("Display");
    Display.innerHTML = total;
}

<input onkeyup="sumVal()" />
<input onkeyup="sumVal()" />
<input onkeyup="sumVal()" />
4

3 回答 3

3

在将其添加到总数之前尝试检查您的值是否为 NaN:

total += (isNaN(parseInt(ele.value, 10)) ? 0 : parseInt(ele.value, 10));

另外,不要忘记基数parseInt(或parseFloat在有小数位的情况下使用):

基数

一个整数,表示上述字符串的基数。 始终指定此参数以消除读者混淆并保证可预测的行为。当未指定基数时,不同的实现会产生不同的结果。

var nums = [10, "sads", 44, 16];
var numsLen = nums.length;
var total = 0;

while(numsLen--){
    total += (isNaN(parseInt(nums[numsLen], 10)) ? 0 : parseInt(nums[numsLen], 10));
}

在此示例中,由于“sads”不是数字 (NaN),我们将 0 添加到总数中。

于 2013-04-11T15:16:50.917 回答
2

您应该首先确保元素的值是有效数字:

if (isNumber(ele.value))
    total += parseInt(ele.value, 10);
}

您将需要此功能:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

上面的函数就是这里的著名isNumber函数。

于 2013-04-11T15:18:08.683 回答
1

0如果不是数字,只需添加:

var theInt = parseInt(ele.value, 10);
total += (isNaN(theInt)) ? 0 : theInt;
于 2013-04-11T15:16:57.043 回答