2014-07-01 55 views
1

我在這個計算器腳本中收到NaN錯誤: 有沒有想法?我收到NaN錯誤

這裏是文本格式的全HTML:

https://www.dropbox.com/s/i3u429bn5bjd4i9/orecalculator.txt

<script language="JavaScript"> 

var IDs = [22,17425,17426,1223,17428,17429,1225,17432,17433,1232,17436,17437,1229,17865,17866,21,17440,17441,1231,17444,17445,1226,17448,17449,20,17452,17453,11396,17869,17870,1227,17867,17868,18,17455,17456,1224,17459,17460,1228,17463,17464,19,17466,17467,1230,17470,17471]; 

function calculate(i){ 
    while (i + 1 < IDs.length) { 
     var y=document.getElementById('reward'); 
     var x=document.getElementById(IDs[i]); 
     y.value=parseInt(y.value)+parseInt(x.value); 
     i++; 
    } 
} 
</script> 
+2

什麼是您的HTML是什麼樣子?至少有一個元素沒有可以解析的值。 –

+0

y或x可能具有未定義的值或您不期待的值。 –

+0

你如何以及在哪裏調用'calculate'?特別是:你通過了什麼? – Bergi

回答

3

我已經運行在控制檯這個代碼,發現下面的輸出

document.getElementById('reward') 
//output <input type=​"text" id=​"reward">​ 
document.getElementById('reward').value 
//"" 
parseInt(document.getElementById('reward').value) 
//NaN 
parseInt("") 
//NaN 

說明

空字符串parseInt函數是NaN

解決方案

使用

Reward: <input type="text" id="reward" value="0"> 

代替

Reward: <input type="text" id="reward"> 

修正:JS代碼

function calculate(i){ 
    while (i + 1 < IDs.length) { 
     var y=document.getElementById('reward'); 
     var x=document.getElementById(IDs[i]); 
     y.value=parseInt(y.value|0)+parseInt(x.value|0); 
     i++; 
    } 
} 
+0

你可以修復JS而不是標記嗎? – Bergi

+0

這也值得把失敗者放入JS中。 –

+0

@Bergi,@ -0_0 - 對不起,我不知道? –

0

未經檢驗的,但應該是這樣的:

calculate = function (i){ 

    var y = document.getElementById('reward'); 
    var x = 0; 
    while (i + 1 < IDs.length) { 

     var elm = document.getElementById(IDs[i]); 
     x+=parseInt(elm.value||0); 
     i++; 
    } 
    y.value = x; 
}; 

工作小提琴:

http://jsfiddle.net/g30rg3/8ADQX/

+2

'未定義變量:y'?無論如何,這爲什麼更好?請解釋! – Bergi

+0

固定並添加了一個工作小提琴。這是一個更好的性能明智,因爲你不必每個ID掃描文件的獎勵元素。它還將計算定義爲全局變量,以便輸入可以訪問它。 – George

+0

在小提琴中沒有任何解釋:-( – Bergi