如何使此功能起作用?

时间:2013-05-23 13:41:36

标签: javascript arrays for-loop

我设置了两个数组,我希望将每个数组中的每个值相乘。然后我想以变量的形式得到总值。我将发布下面的内容。我认为我的问题可能是我不确定如何将每次运行的代码加在一起?

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”。

2 个答案:

答案 0 :(得分:7)

你的问题是你正在循环中重新定义flatCharge,因此在循环之外它是不正确的。此外,您不是在添加值,而是在循环的每次迭代中替换它们。将循环更改为:

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

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

它应该有用。

答案 1 :(得分: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;
    }
}