对于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年前的事了。