2009-02-13 103 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 
} 

它的工作原理,但我没有对为什么其他没有解释。 ..