我想动态计算小计的总和,但我总是得到这个错误:
document.getElementById("item_subtotal[" + cnt + "]") is null
我的javascript代码:
function calculateTotalAll(numitems) {
var cnt = 1;
var totalAmt = 0;
while(cnt <= numitems) {
totalAmt = parseInt(totalAmt) + parseInt(document.getElementById('item_subtotal[' + cnt + ']').value);
cnt++;
}
document.getElementById('order_total').value = parseInt(totalAmt);
}
答案 0 :(得分:2)
我会查看id是否存在,即
while(cnt <= numitems) {
var curItem = document.getElementById('item_subtotal[' + cnt + ']');
if(curItem!=null){
totalAmt = parseInt(totalAmt) + parseInt(curItem.value);
}
cnt++;
}
此外,我会使用Firefox的Firebug扩展来查看可能出错的地方:
while(cnt <= numitems) {
var curItem = document.getElementById('item_subtotal[' + cnt + ']');
if(curItem!=null){
totalAmt = parseInt(totalAmt) + parseInt(curItem.value);
}else{
console.log('Couldn\'t find element item_subtotal[' + cnt + ']');
}
cnt++;
}
答案 1 :(得分:0)
项目尚未在您的页面中定义 - 仔细检查以确保它实际上在源代码中。
答案 2 :(得分:0)
您的问题可能是方括号。
来自html4 spec:
ID和NAME令牌必须以a开头 信([A-Za-z]),可以遵循 任意数量的字母,数字 ([0-9]),连字符(“ - ”),下划线 (“_”),冒号(“:”)和句号 ( “”)。
答案 3 :(得分:0)
你非常接近,但你需要检查具有空值的字段,而不是假设它们包含数字。它仅适用于此JS fiddle
中的少量修改将您的功能更改为:
function calculateTotal(numitems) {
var totalAmt = 0;
for (var cnt = 1; cnt <= numitems; cnt++) {
var subtotal = document.getElementById('item_subtotal[' + cnt + ']');
if (subtotal.value === null || subtotal.value === '') {
continue;
}
totalAmt += (subtotal.value * 1);
}
document.getElementById('order_total').innerHTML = totalAmt;
}