2010-01-29 150 views
3

我試着用下面的功能來查找表單字段的值,原因其循環是因爲動態的形式變化,這意味着有可能是在外地的Javascript功能不能正常工作

的Java腳本函數的ID差距是

function totalProductPrice() { 
     var maxid = document.getElementById("field_id").value; 
     var i = 0; 
     var totalprice = 0; 

     while (i<=maxid) 
      { 
       totalprice += document.getElementById("QuoteItem" + i + "price").value; 
       i++; 
      } 

     document.getElementById("QuoteTotalcost").value = totalprice; 
    } 

,然後在輸入字段中的一個,我有

onchange='totalProductPrice();' 

當我改變這個字段的值應該加起來的所有字段,然後我nsert成所謂QUoteTotalcost但是當我嘗試它什麼也不做的領域,在Firebug的控制檯它輸出

element.dispatchEvent is not a function 
[Break on this error] element.dispatchEvent(event); 
prototype.js (line 4619) 
document.getElementById("QuoteItem" + i + "price") is null 
[Break on this error] totalprice += document.getElementById("QuoteItem" + i + "price").value; 
+0

該ID似乎從螢火蟲錯誤無效。你確定你有ID爲「QuoteItem1price」,「QuoteItem2price」等元素。你是否檢查區分大小寫? – Anurag 2010-01-29 11:33:39

+0

是的,我檢查了一遍又一遍,只是確保我不會瘋狂.. ID會根據已創建和刪除的內容而有所不同 - 即在某些情況下,第一個有效的將是QuoteItem4price,因此它應該能夠跳過那些前3沒有任何問題,我會想像 – kwhohasamullet 2010-01-29 11:37:59

回答

4

它確實是因爲你想空對象上閱讀的屬性。你需要檢查對象是否存在。

while (i <= maxid) { 
    var item = document.getElementById("QuoteItem" + i + "price"); 
    if (item != null) { 
    totalprice += parseFloat(item.value); 
    } 
} 

雖然這是一種有點粗略的總計方法。它通常最好使用類這樣的事情:

<input type="text" class="quote-item-price"> 

有:

var items = document.getElementByTagName("input"); 
for (var i=0; i<items.length; i++) { 
    if (items[i].className == "quote-item-price") { 
    totalprice += parseFloat(items[i].value); 
    } 
} 

這樣,你不必使用標識周圍亂,以確保它們是獨一無二的,等等。

編輯:你已經用jQuery標記了你的問題。使用jQuery它要簡單得多。

var totalprice = 0; 
$("input.quote-item-price").each(function() { 
    totalprice += parseFloat($(this).val()); 
    // or 
    totalprice += parseFloat(this.value); 
}); 

編輯2:表單字段值是字符串。如果你使用+這是一個字符串連接。我已經修改了上面的內容來呼叫parseFloat()將任何值轉換爲數字。您可能需要使用toFixed()將其轉換爲固定的小數位數:

totalprice = totalprice.toFixed(2); 
+0

感謝它解決了錯誤和它現在被傳遞到總價格領域,但增加了價值觀它只是將其附加到前一個,任何想法? – kwhohasamullet 2010-01-29 11:56:27

+0

謝謝你 - 對不起,我沒有意識到來自PHP的差異,它適用於你,乾杯:D – kwhohasamullet 2010-01-29 12:22:27