2015-10-25 107 views
2

下面的行(涉嫌)查找ID爲frm1W3S source)的表單。通過ID訪問表單

var x = document.forms["frm1"]; 

它爲什麼要工作?如果你看referencedocument.forms返回表單的集合。 JS中沒有關聯數組,因此document.forms["frm1"]基本上要求返回集合的名爲frm1的屬性。我認爲正確的方法是使用namedItem("frm1")

這僅僅是本教程中的一個錯誤,或許是過去有效並且不再有效的東西?

+0

這是至少在'forms'和'frames'集合中的一個特性。最初'name'被用來代替'id'來標識一個特殊的形式,並且一些瀏覽器可能仍然會被刪除到最初的實現。請參閱[HTMLCollection]的文檔(https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection)。在示例代碼中有'document.forms.myForm;',這是你所擁有的變體。 – Teemu

+0

@Teemu所以基本上這個參考是不完整的? http://www.w3schools.com/jsref/coll_doc_forms.asp它根本沒有提及它。 – user107986

+1

http://www.w3fools.com/ – KingCodeFish

回答

0

由於@Teemu指出,你在這裏尋找謊言回答: 返回特定節點的ID,或作爲後備https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection

HTMLCollection.namedItem(),name指定的字符串相匹配按名字。只有在引用的元素支持name屬性的情況下,才按照名稱進行匹配,只能在HTML中完成。如果給定名稱不存在節點,則返回null。

雖然這是真實的,並能正常工作的ID給一個字符串時,它也支持指數:

的HTMLCollection也暴露出其成員如直接按名稱和索引屬性。 HTML ID可能包含:和。作爲有效的字符,這將需要使用括號符號來訪問屬性。目前HTMLCollections不能識別純數字ID,這會導致與數組式樣訪問衝突,儘管HTML5確實允許這些。

正如您所看到的,混合ID和索引一起出現問題。但是這可以讓你看到一個短而甜的語法。 HTML5已經放鬆了嚴格性,但可能會導致衝突。

+0

根據您從w3fools收集的過時信息,您對w3schools的陳述是誤導性的。即使w3fools不再抱怨過去與w3schools的問題,你不應該鸚鵡舊信息。 – Rob

+0

它已被刪除。 – KingCodeFish

+0

OP示例工作的基本原因是返回的'HTMLCollection'是一個宿主對象。主機對象可以擁有本地JS對象所沒有的方法和屬性。 – Teemu