为什么legacy.DOM-object.property在遗留应用程序中为null

时间:2015-04-07 11:19:41

标签: javascript legacy-code

我无法找到javascript代码的以下行为的合理解释。 我对javascript并不熟悉,如果以下代码有效。

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

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

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

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

此语法/符号在整个应用程序中使用,适用于大多数页面。这里的问题是:为什么这个旧代码仍然有用,为什么它现在会破坏?我以前从未阅读过document.DOM-object.xxx符号,但我无法找到有关它的文档。

3 个答案:

答案 0 :(得分:1)

  

由于budget_sections是元素的ID

不,这是表格的名称。

document.formname.length

仍然有效。

  

我找不到有关它的文档。

以下是MDN中document.images.length

的一个例子

<强> MDN link

properties中所有这些都是document。您可以在该页面的左侧边栏中阅读有关它的更多信息。您将找到与document.DOM_Object.property

类似的所有属性的文档

答案 1 :(得分:1)

我认为那是旧记谱法。如果您将表单的名称属性设置为&#34; budget_sections&#34;而不是id然后它将工作:

&#13;
&#13;
<!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>
&#13;
&#13;
&#13;

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

&#13;
&#13;
<!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>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果我记得我的IE6天正确document.forms ['budget_sections']以获取表单项,那应该使用...

IE和Netscape如何处理事情之间存在差异。但我不确定,因为那是超过15年前的嘿。