当我删除号码时如何解决NaN?

时间:2013-04-11 15:14:25

标签: javascript dom javascript-events sum

这是我在所有文本框中添加时的代码,它工作正常但在删除数字后显示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()" />

3 个答案:

答案 0 :(得分: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));
}

在这个example中,由于“sads”是而不是数字(NaN),我们在总数中加0。

答案 1 :(得分:2)

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

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

你需要这个功能:

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

上述功能是着名的isNumber函数from here

答案 2 :(得分:1)

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

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