2010-10-15 47 views
4

我想計算動態分類彙總的總和,但我總是得到這個錯誤:計算和動態地使用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); 
} 
+0

你可以發佈html對於你正在使用的元素? – 2010-10-15 05:00:21

+0

最後一行不需要'parseInt()';你需要'string()'來代替。 – staticsan 2010-10-19 03:23:50

回答

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; 
} 
+0

這行我有一個問題,我猜:document.getElementById('item_subtotal ['+ cnt +']');因爲它會提示如果(parseInt(subtot.value)=='')爲空。幫助 – anonymous2 2010-10-19 00:34:56

+0

但是,如果我用document.getElementById('item_subtotal [1]')測試它,它工作正常 – anonymous2 2010-10-19 00:35:34

+0

我不知道你在說什麼。如果你需要的話,檢查null是很容易的,但是因爲你應該知道有多少元素,所以它不是特別必要的。 – 2010-10-19 00:44:35

0

該項目還沒有被定義你的頁面 - 仔細檢查以確保它確實存在於源代碼中。

+0

當我做的例子︰alert(document.getElementById('item_subtotal [25]')。value);將得到值 – anonymous2 2010-10-15 04:57:42

0

您的問題可能是那些方括號。

html4 spec

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

+0

方括號是好的,也經常用於PHP腳本的益處 – 2010-10-15 05:33:31

2

如果ID存在我是這樣看的,即

while(cnt <= numitems) { 
    var curItem = document.getElementById('item_subtotal[' + cnt + ']'); 
    if(curItem!=null){ 
     totalAmt = parseInt(totalAmt) + parseInt(curItem.value); 
    } 
    cnt++; 
    } 

此外,我會用Firebug擴展對於Firefox來看看可能出現什麼問題:

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