为什么是文档.旧版应用程序中的DOM-object.properties为null



对于javascript代码的以下行为,我找不到合理的解释。我不太熟悉javascript以及以下代码是否有效。

在迁移的遗留应用程序中,有以下代码:

function myFunctionName(name)
{
    for(k=0; k < document.budget_sections.length; ++k) {
    //...do something
    }
}

请注意document.budget_sections.length部分。在生产中,此代码抛出一个错误,表示无法访问null的属性长度。在我的开发环境中,这运行得很好。由于budget_sections是表单元素(<form id="budget_sections" method="post" runat="server">)的Id,我将代码更改为我已知的语法:

function myFunctionName(name)
{
    var form = document.getElementById("budget_sections");
    for(k=0; k < form.length; ++k) {
    //...do something
    }
}

这种语法/表示法在整个应用程序中使用,适用于大多数页面。我面临的问题是:为什么这个旧代码过去和现在都能工作,为什么它现在可能会崩溃?我以前从未读过符号document.DOM-object.xxx,也找不到关于它的文档。

由于budget_sections是元素的Id

不,这是表格的名称。

document.formname.length

仍然有效。

我找不到有关它的文档。

以下是MDN中document.images.length 的一个这样的例子

MDN链接

所有这些都是您的document中的properties。你可以在页面左侧边栏中阅读更多关于它的信息。您可以找到与document.DOM_Object.property 类似的所有属性的文档

我认为这是旧的表示法。如果您将表单的name属性设置为"budget_sections"而不是id,那么它将起作用:

<!DOCTYPE html>
<html>
<body>
<form name="xx">
  Form 1
</form>
<form name="xx">
  Form 2
</form>
<button onclick="alert(document.xx.length)">Number of forms</button>
</body>
</html>

或者您可以使用表单而不是名称值来获得相同的结果:

<!DOCTYPE html>
<html>
<body>
<form name="xx">
  Form 1
</form>
<form name="xx">
  Form 2
</form>
<button onclick="alert(document.forms.length)">Number of forms</button>
</body>
</html>

如果我正确地记得我的IE6天document.forms['budget_sections'],它应该用来获取表单项。。。

IE和Netscape处理事情的方式不同。但我不确定,因为那是15年前的事了。

最新更新