2013-01-20 36 views
0

我在我的腳本中有一個小問題,我無法獲得超過9輸入的總和。不能總結超過9輸入javascript

最多9個工作正常,但如果您添加一個新的輸入字段,則停止工作。

事業部白衣輸入和按鈕:

<div id="valuesContainer"> 
<input type="text" id="value01" /> 
<input type="text" id="value02" /> 
<input type="text" id="value03" /> 
<input type="text" id="value04" /> 
<input type="text" id="value05" /> 
<input type="text" id="value06" /> 
<input type="text" id="value07" /> 
<input type="text" id="value08" /> 
<input type="text" id="value09" /> 

</div> 
<input type="button" value="Add Value" id="addMore" onclick="addInput();" /> 
<input type="button" value="Calculate Total" onclick="getTotal();" /> 
<div id="total"></div> 

的Javascript做了功能和增加新的輸入字段。在你的代碼

<script type="text/javascript"> 
var max = 9; 

function getValues(id){ 
    var result = document.getElementById(id).value; 
    return (result ? result : 0); 
} 

function addInput(){ 
    max++; 
    var input = '<input type="text" id="value'+ max +'" />'; 
    document.getElementById("valuesContainer").innerHTML += input; 
} 

function getTotal(){ 
    var sum = 0; 
    for(var i=1; i <= max; i++){ 
     sum = sum + parseFloat(getValues("value0" + i)); 
    } 
    document.getElementById("total").innerHTML = sum; 
} 
    </script> 
+0

這不是真的值得成爲自己的問題,你應該澄清你的[原問題](http://stackoverflow.com/questions/14420570/how-to-get-auto-javascript-input-fields)。此外,您不能在Stackoverflow上提出問題作爲學習實際材料的替代方法。它不會讓你走遠。 –

+0

但爲了幫助你:爲什麼你使用ID?從長遠來看,'getElementsByTagName'可能更加靈活:https://developer.mozilla.org/en-US/docs/DOM/element.getElementsByTagName。 –

回答

8

通知你明確加入 「value0」 索引之前:

sum = sum + parseFloat(getValues("value0" + i)); 

與該代碼,你的第十指數應該是 「value010」


你如果索引小於10,可以改爲預先設置「0」:

if (i < 10) 
    sum = sum + parseFloat(getValues("value0" + i)); 
else 
    sum = sum + parseFloat(getValues("value" + i)); 

然後你可以使用「value10」作爲第十個索引,這可能是你最初想要的。

您可以爲較大數量或其他情況做類似的工作。對於更一般的解決方案,您可以使用一個功能pad the string to a given size

3

你怎麼命名它們?

我的猜測是你使用的是value10,但是你的getValues代碼附加到value0。我敢打賭,如果你使用value010,它會工作。

如果下一個值必須value10,你有兩個選擇:

1)重命名value01通過value09value1通過value9

2)追加0,只有當我< 10:

for(var i=1; i <= max; i++){ 
    parseFloat(getValues("value" + ((i<10)? "0" + i : i))); 
} 
+0

那麼,其實下一個需要value10而不是value010,也許我可以從01或1開始獲得超過10個,唯一的問題是我需要預先加載9個輸入字段。謝謝 –

+0

@NeoCastelli看到我的更新選項。 –

+0

你好,約翰,我不明白你的解決方案。謝謝分配 –

3

您的代碼表示

getValues("value0" + i) 

所以我的值> 9,它會尋找ID「value010」等,因此,如果您額外的輸入有ID,如

<input type="text" id="value10" /> 

然後「value010」不匹配「value10」你贏了找不到你要找的東西。