2015-04-07 59 views
0

我无法找到以下JavaScript代码行为的合理解释。 我不是很熟悉JavaScript,如果下面的代码是有效的。为什么遗留应用程序中的document.DOM-object.property为空

在迁移遗留应用程序没有沿着这些线路代码:

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之前的记号,我找不到有关它的文档。

回答

1

由于budget_sections是一个元素

都能跟得上的ID,这是形式的名称。

document.formname.length 

仍然有效。

我找不到关于它的文档。

这里是MDN这样一个例子为document.images.length

MDN link

所有这些都是在你documentproperties。您可以在该页左侧边栏中阅读更多关于它的信息。你会发现所有的类似属性的文件,以document.DOM_Object.property

+0

这会清理一些东西。但我正确地使用Id。它被定义为'

'而不是名称。 – Marco

+0

你可以试试看。使用'id =“budget_sections”'创建一个表单,并使用'name =“budget_sections”'创建另一个表单。 DOM规范只允许'name'属性引用而不是ID – mohamedrias

0

如果我还记得我的IE6天正确document.forms [“budget_sections”]来获得表单项目应该使用...

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

1

我认为这是旧的符号。如果你设置你的表格name属性,而不是ID“budget_sections”,那么它会工作:

<!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>

+0

你有关于ID和name属性的解释http://stackoverflow.com/questions/1397592/difference-between-id-and-name-attributes-in -html – Zivko

+0

从我在这里,这个代码的原始创建者已经搞乱了ID和名称,无论如何它以某种方式工作。 – Marco

相关问题