1 回答

TA貢獻1862條經驗 獲得超6個贊
有幾點:a)document.getElementsByName("")返回一個 NodeList 元素集合,因此您無法像這樣獲取每個輸入的值,您必須在 for 循環內獲取它們;b) 然后您還需要在解析之前獲取unitPrice[i]循環內每個值的值,c) 每次迭代后應重置總數,因此可以將其放在循環內。見下文:
function calculate() {
var Quantity = document.getElementsByName("Quantity");
var unitPrice = document.getElementsByName("unitPrice");
for (var i = 0; i < Quantity.length; i++) {
if (!Quantity[i].value) continue; // prevent NaN
let total = parseInt(Quantity[i].value) * parseInt(unitPrice[i].value);
document.getElementsByName("subtotal")[i].value = total;
}
}
<table>
<tr>
<td>
<input onblur="calculate()" name="Quantity" size="2" />
<input name="unitPrice" value="5" size="2" />
<input name="subtotal" size="2" />
</td>
</tr>
<tr>
<td>
<input onblur="calculate()" name="Quantity" size="2" />
<input name="unitPrice" value="5" size="2" />
<input name="subtotal" size="2" />
</td>
</tr>
</table>
為了避免得到NaN
沒有任何值的結果,您可以添加if (!Quantity[i].value) continue;
為 for 循環中的第一行,這應該可以防止它。
- 1 回答
- 0 關注
- 160 瀏覽
添加回答
舉報