如果在窗體中有多個表單元素name
,則表單中elements
集合中的條目最終是這些字段的集合(這很方便)。 DOM2HTML規範covers the elements
collection但是當有多個具有相同名稱的字段時,似乎並未立即指定此行爲。行爲是否覆蓋了標準(DOM2 HTML規範或其他規範中的其他位置)?具有相同名稱的表單元素反映在DOM中
爲了清楚起見,我不問問訪問這些字段的最佳方式是什麼。我在問,他們最終以elements
集合中的集合(各種集合)是否被一個標準覆蓋,如果是的話,哪一個。
實施例(live copy):
HTML:
<form id="theForm">
<input type="text" name="foo" value="one">
<input type="text" name="foo" value="two">
</form>
JavaScript的:
var form = document.getElementById("theForm"),
foo = form.elements.foo,
index;
console.log("typeof foo = " + typeof foo);
if (typeof foo !== "undefined") {
console.log("Object#toString says: " + Object.prototype.toString.call(foo));
}
if ('length' in foo && 'item' in foo) {
console.log("Looks like a collection of some kind:");
for (index = 0; index < foo.length; ++index) {
console.log(index + ": " + foo[index].value);
}
}
樣本輸出(對於鉻):
typeof foo = object Object#toString says: [object NodeList] Looks like a collection of some kind: 0: one 1: two
我檢查IE6 ,7,8,an d 9,Firefox 4.0,Firefox 3.6,Chrome 12,Opera 11和Safari 5.它們都使elements
中的某個類型的集合(Chrome,Firefox和Safari使其成爲NodeList
[儘管Safari上的typeof
「函數」而不是「對象」],而IE和Opera使它成爲HTMLCollection
,但它們全都具有length
,item
和[]
訪問權限)。我只是試圖找到指定行爲的標準(如果有的話)。
爲什麼不使用document.getElementsByName(「fieldNAME」),它將在所有瀏覽器中返回一個數組 – mplungjan
@mplungjan:@ T.J。只是想知道這種行爲是否定義在某個地方。 –
@mplungjan:引用:*「我不是在問什麼是訪問這些字段的最佳方式,我是問他們是否以'元素'集合中的集合(各種類型)一個標準,如果是這樣的話。「*我知道我可以使用'getElementsByName'(儘管它會給我所有具有該名稱的元素**,而不僅僅是表單中的元素)。問題的關鍵是標準。 –