如果表单中有多个具有相同name
的表单元素,则表单上elements
集合中的条目最终会成为这些字段的集合(这很方便)。 DOM2 HTML规范covers the elements
collection但当有多个具有相同名称的字段时,似乎不会立即指定此行为。标准是否涵盖了这种行为(DOM2 HTML规范中的其他地方或其他规范中)?
为清楚起见,我不是问最好的方法是访问这些字段。我问他们最终收集在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);
}
}
示例输出(适用于Chrome):
typeof foo = object Object#toString says: [object NodeList] Looks like a collection of some kind: 0: one 1: two
我已经检查了IE6,7,8和9,Firefox 4.0,Firefox 3.6,Chrome 12,Opera 11和Safari 5.它们都在elements
中输入了某种类型的集合(Chrome ,Firefox和Safari使它成为NodeList
[虽然奇怪的是在typeof
是“功能”而不是“对象”],而IE和Opera使它成为HTMLCollection
,但它们都是拥有length
,item
和[]
访问权限。我只是想找到指定行为的标准(如果有的话)。
答案 0 :(得分:2)
HTML5规范草案(以及WHAT-WG版本)涵盖了这一点,在这种情况下更像是关于记录它如何始终有效,在HTMLFormControlsCollection
(W3C ref,{{ 3}}):
如果有多个匹配项,则会返回包含所有这些元素的[
HTMLFormControlsCollection
(WHAT-WG ref,W3C ref)对象。
答案 1 :(得分:0)
似乎Firefox 4.0.1和5中的表单访问和DOM访问之间存在差异
http://jsfiddle.net/mplungjan/jMnWP/
form.foo:
typeof formFoo = object
Object#toString says: [object NodeList]
Looks like a collection of some kind:
0: one
1: two
document.getElementsByName( “foo” 的):
typeof docFoo = object
Object#toString says: [object HTMLCollection]
Looks like a collection of some kind:
0: one
1: two