javascript是否缓存DOM元素?

时间:2009-02-13 06:18:22

标签: javascript dom caching

我正在使用mootools在我的一个表单中切换两个DOM元素的显示(和存在)。然后,我使用javascript来验证表单,以确保填写所有必填字段。问题是浏览器似乎缓存元素。例如,我有这样的HTML:

<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元素时,此工作正常。但是,当我单击用input元素替换select元素的按钮时,从form.inputbox开始,javascript代码中的form.selection包含相应的元素,因为它处于DOM的最后状态 - 即使它不再存在于DOM中。那么javascript是否缓存DOM而不是在从DOM中删除元素时更新元素?这里发生了什么,更重要的是,我该如何解决它呢?

编辑:我使用mootools来删除和替换元素,可以找到相应函数的文档herehere

2 个答案:

答案 0 :(得分:3)

当不存在时,按名称(form.elementName)评估元素返回undefined。评估对象的属性值($('elementId'))将返回null。未定义和null的处理方式不同。

答案 1 :(得分: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
}

它有效,但我没有解释为什么对方没有......