2013-04-18 4 views
1

Я хочу, чтобы эта функция добавляла два значения, введенные из формы, но вместо добавления значений, которые она объединяет. Если я ввожу 2 и 2, то приходит 22, тогда как я хочу, чтобы 4 выводилось. Я считать, что цикл не wotkingДля Loop not working

<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> 
+1

'вход [0] и' вход [1] 'по-прежнему элемент, и вы должны добавить значение на' ParseInt (вход [0] .value) + ParseInt (input [1] .value) ' – Pandian

ответ

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> 

EDIT

Example Fiddle

+0

Поскольку parseInt может возвращать NaN ..... Я предлагаю' parseInt (input [i] .value) || 0' – loxxy

+0

Можете ли вы отправить рабочий jsfiddle, пожалуйста. – user2197789

+3

@ user2197789 Вы не можете скопировать-вставить код самостоятельно? – JJJ

1

Почему вы пытаетесь перезаписать Dóm элемент ввода в массиве со значением он несет? Изменить на:

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

В вашем коде input[0] и input[1] является Еще элемент и вы должны добавить его значение, как показано ниже

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

Fiddle:http://jsfiddle.net/RYh7U/145/