For Loop无法正常工作

时间:2013-04-18 10:13:18

标签: javascript

我希望此函数添加从表单输入的两个值,但不是添加值,而是合并数字。如果我输入2和2它是22,而我想要4输出。我认为for循环不是wotking

<script>
var calculate = function(){
var input = document.getElementsByTagName("input");
var length = input.length;
for (var i = 0; i < length; i++) {
  input[i] = input[i].value;
  input[i] = parseInt(input[i]);
}
var total_living_room = input[0] + input[1];
document.getElementById("sh").innerHTML=total_living_room;
}
</script>

3 个答案:

答案 0 :(得分:5)

问题是,getElementsByTagName()返回一个NodeList而没有数组(参见,例如,MDN on this)。

两者在许多方面表现相似,但NodeList的元素不能像你那样改变。

作为解决方案,您将值解析为第二个数组并使用:

<script>
var calculate = function(){
  var input = document.getElementsByTagName("input"),
      length = input.length,
      inputVals = [];
  for (var i = 0; i < length; i++) {
    inputVals.push( parseInt( input[i].value, 10 ) );
  }
  var total_living_room = inputVals[0] + inputVals[1];
  document.getElementById("sh").innerHTML=total_living_room;
}
</script>

修改

Example Fiddle

答案 1 :(得分:1)

为什么要尝试使用它携带的值覆盖数组中的输入dom元素?改为:

var cache = [];
for (var i = 0; i < length; i++) {
    cache.push(parseInt(input[i].value, 10));
}

答案 2 :(得分:0)

在您的代码中input[0]input[1] 仍然是元素,您必须添加其值,如下所示

parseInt(input[0].value) + parseInt(input[1].value)

小提琴: http://jsfiddle.net/RYh7U/145/