2010-09-18 42 views
0

我試圖禁用/啓用使用javascript的HTML頁面的多個表單元素。我有一個包含許多字段的表單,表單的每一行都有一個複選框來啓用/禁用行中的元素。使用javascript禁用/啓用多個表單元素的問題

問題是,只有前兩個表單元素被禁用(不管順序)。之後,該函數中剩餘的JavaScript代碼將不再執行。

下面的代碼(這是一個由每一個複選框的onchange屬性稱爲功能的一部分):

document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_quantity")[0].disabled = !theBox.checked; 
document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_description")[0].disabled = !theBox.checked; 
document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_price")[0].disabled = !theBox.checked; 
document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_language")[0].disabled = !theBox.checked; 

每個表單元素具有不同的(唯一的)名稱和代碼的工作只是單一的線罰款......直到你把它們放在一起。 例如:在上面的代碼中,「數量」和「描述」字段將被禁用/啓用,但「價格」和「語言」不會。

如果我改變行的順序,前兩個總是執行,無論如何。 然後每行代碼都不起作用;這就像它的評論。我甚至會提出一些警告來嘗試調試,但如果我在上述代碼之後插入它們,它們會被忽略(根本沒有對話框)。元素名稱是正確的。

我確定我在某個地方犯了一個錯誤,但是由於單行代碼正在工作,我不知道在哪裏看......這讓我瘋狂!

請,我真的可以使用一些幫助。

回答

0

我剛剛開始工作,正如我認爲的那樣,這是一個非常糟糕的錯誤。

問題是,並非HTML中的每個表單行都包含所有這4個字段。所以,基本上,我試圖訪問一個空對象的屬性。

我解決它通過把:

if(document.getElementById(id) != null)

試圖操縱元素之前。

有時候當你在趕時間,你最終會忽略一些很基本的東西...

謝謝您的時間。

+0

當問這樣的問題時,通常包含HTML是一個好主意。只看JavaScript,就沒有辦法知道錯誤在哪裏。 – Saul 2010-09-18 13:42:32

+0

你說得對。下次我也會發布HTML。儘管如此,我希望下次不會;) – Valerio 2010-09-18 14:00:34