2015-04-07 47 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

相關問題