2009-02-13 104 views
2

我正在使用mootools在我的一個表單中切換兩個DOM元素的顯示(和存在)。然後,我使用javascript來驗證表單以確保填寫了所有必填字段。問題是瀏覽器似乎在緩存元素。例如,我有HTML這樣的:JavaScript是否緩存DOM元素?

<input name="inputbox" id="inputbox" type="text" /> 
<select name="selection" id="selection">...</select> 

並進行驗證的JavaScript是這樣的:

if (form.inputbox != null && form.inputbox.value == "") { 
    //don't submit form 
{ 
else if (form.selection != null && form.selection.value == 0) { 
    //don't submit form 
} 

現在,這工作正常第一次加載頁面時和input因素是除去。然而,當我點擊替換與select元素input元素,從此按鈕上的JavaScript代碼form.inputboxform.selection遏制,因爲它是在DOM其最後的狀態相應的元素 - 即使它不再DOM。那麼JavaScript是否會緩存DOM,並且在從DOM中刪除元素時不更新這些元素?這裏發生了什麼,更重要的是,我該如何解決它?

編輯:我正在使用mootools來刪除和替換元素,可以找到相應功能的文檔herehere

+0

您使用什麼代碼從DOM中刪除輸入? – 2009-02-13 06:21:52

+0

顯示和存在是不同的...... – alex 2009-02-13 06:22:57

回答

3

當不存在時,按名稱評估元素(form.elementName)返回undefined。評估對象的屬性值($('elementId'))返回null。未定義和null的處理方式不同。

1

好吧,我現在可以回答我的問題的第二部分:如何解決它。如果您使用的mootools,然後用美元函數(或可能的getElementById工作)而不是使用form.selectionform.inputbox

if ($("inputbox") != null && $("inputbox").value == "") { 
    //don't submit form 
{ 
else if ($("selection") != null && $("selection").value == 0) { 
    //don't submit form 
} 

它的工作原理,但我沒有對爲什麼其他沒有解釋。 ..