2013-05-23 6 views
0

У меня есть два массива, которые я хочу умножить на каждое значение внутри каждого из них. Затем я хочу получить общее значение в виде переменной. Я опубликую то, что у меня есть. Я думаю, что моя проблема может заключаться в том, что я не уверен, как получить каждый запуск кода для добавления вместе?Как я могу заставить эту функцию работать?

var flatQty=[]; 
flatQty[0]= document.getElementById("flats1").value; 
flatQty[1]= document.getElementById("flats2").value; 
flatQty[2]= document.getElementById("flats3").value; 
flatQty[3]= document.getElementById("flats4").value; 
flatQty[4]= document.getElementById("flats5").value; 

var flatWidth=[]; 
flatWidth[0]=document.getElementById("flatwidth1").value; 
flatWidth[1]=document.getElementById("flatwidth2").value; 
flatWidth[2]=document.getElementById("flatwidth3").value; 
flatWidth[3]=document.getElementById("flatwidth4").value; 
flatWidth[4]=document.getElementById("flatwidth5").value; 

for (var i=0;i<5;i++) 
{ 
var flatCharge=flatWidth[i]*2*flatQty[i]; 
} 

document.getElementById("flatTest").innerHTML=flatCharge; 

Когда я запускаю код, ничего не печатается в id = "flatTest".

ответ

7

Ваших проблем в том, что вы пересматриваете ваш flatCharge внутри цикла, поэтому это не правильно вне цикла. Кроме того, вы не добавляете значения, а заменяете их на каждой итерации цикла. Измените петлю на это:

var flatCharge = 0; 
for (var i = 0; i < 5; i++) { 
    flatCharge += flatWidth[i] * 2 * flatQty[i]; 
}; 

document.getElementById("flatTest").innerHTML = "" + flatCharge; 

и он должен работать.

+1

это не совсем правильно - объявление будет поднято. Однако значение будет _overwritten_ в каждом проходе, поэтому отображаемое значение будет последним вычисленным значением. – Alnitak

+0

Да, вы правы, но он также сказал: «Когда я запускаю код, ничего не печатается в id =« flatTest ».» С его старым кодом, по крайней мере, должен быть последний цикл печати. Так что есть проблема и в другом месте. Во всяком случае +1 –

+0

@ Karl-AndréGagnon Я подозреваю, что он не заполнял все пять пар во время тестирования – Alnitak

0

.value свойства строки, а не числа. поэтому вы должны быть осторожны, как вы справляетесь с ними. Умножение действительно работает для строк, но не для добавления, где оператор + выполняет конкатенацию.

Есть множество способов преобразования из строки номер:

  • +s - преобразует выражение s в число
  • parseFloat(s)
  • parseInt(s, 10) для целых чисел

Действительное проблема в вашем коде заключается в том, что вы переписываете рассчитанное значение в каждом проходе с помощью = оператор вместо +=.

Я предлагаю рефакторинг всего ваш кода таким образом, чтобы избежать всех повторения:

var flatCharge = 0; 
for (var i = 1; i <= 5; ++i) { 
    var qty = +document.getElementById('flats' + i).value; 
    var width = +document.getElementById('flatwidth' + i).value; 

    if (!isNaN(qty) && !isNaN(width)) { 
     flatCharge += 2 * qty * width; 
    } 
} 
+1

Умножение на строки выполняет неявное преобразование * toNumber *. –

+0

ha, так и есть. черт. Я думал о добавлении. – Alnitak

Смежные вопросы