使用javascript动态计算总和

时间:2010-10-15 04:52:23

标签: php javascript

我想动态计算小计的总和,但我总是得到这个错误:

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); 
}

4 个答案:

答案 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;
}