2016-01-21 74 views
0

我創建了一個函數updatePrice,該函數綁定到HTML表單中複選框和單選按鈕上的「click」事件。每個複選框和收音機基本上代表一個項目,其價格作爲這些元素的價值屬性。當我檢查或取消選中任何框時,該函數將觸發表單中的所有元素,並將所有選中項目的總價更新爲我的表單下方的div元素,其ID標記爲「priceOutput」。innerHTML不支持事件處理函數(Javascript)

下面的代碼完美地工作,打印出來:這個項目的價格是$(項目的價格)。

function updatePrice() { 
    var price = 0 
    for (i=0;i<=form.length;i++) { 
    var element = form[i] 
    if(element.checked) { 
     price+=parseInt(element.value) 
    } 
    document.getElementById("priceOutput").innerHTML = "The price of this item is $" + price + "." 
    } 
} 

但是,如果切換周圍的最後一行,該行根本不打印:

function updatePrice() { 
    var price = 0 
    for (i=0;i<=form.length;i++) { 
    var element = form[i] 
    if(element.checked) { 
     price+=parseInt(element.value) 
    } 
    } 
    document.getElementById("priceOutput").innerHTML = "The price of this item is $" + price + "." 
} 

我爲什麼一定要寫線{}中的在爲了工作。價格變量的範圍不會覆蓋整個updatePrice函數嗎?

我對編程還比較陌生,所以請原諒我,如果這是一個基本問題。

回答

2

在我看來,它不打印,因爲你是造成一個錯誤。由於數組索引從0開始,您的for循環不應該使用<=而是<

for (i=0;i<form.length;i++) { 
... 
} 

爲什麼沒有被印刷則是因爲在最後一個循環的功能錯誤,並且用戶設置內部HTML永遠不會被執行。

+0

是的 - 這就是原因。當'i == form.length'然後'form [i]'產生一個錯誤時,函數退出並且最終的'document.getElementById ...'從不執行。 – davidkonrad

+0

哦,是的,謝謝你!現在看。所以在前者中,它「有效」,因爲錯誤發生在打印行之後,所以在函數退出之前該行仍然被打印,但是在後者中,它並不是因爲該函數在行之前退出被打印。謝謝! – KohLP

0

好像有與您的代碼中的錯誤,如何從i<=form.length

添加var到您的for循環和去除=爲(var I = 0;我< form.length;我++)

+0

是的=是問題。謝謝 :) – KohLP