2013-04-11 37 views
2

這是代碼,當我在它工作正常,所有的文本框正在增加,但刪除號碼後,顯示的NaN如何解決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()" /> 
+1

NaN表示「不是數字」。該程序試圖告訴你,它不能解析你給它的輸入。 – 2013-04-11 15:15:59

+0

什麼是parseInt(ele.value)?它需要一個字符串格式的整數 – karthikr 2013-04-11 15:16:37

+0

另外:你應該在你的''元素(例如'')上添加一個合適的'type'屬性值。 – 2013-04-11 16:05:10

回答

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

只需添加0是,如果它不是一個數字:

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

你應該確保該元素的值是一個有效的數字第一:

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

你需要這個功能:

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

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