2013-01-20 40 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”你赢了找不到你要找的东西。