具有相同名称的表单元素反映在DOM中

T.J*_*der 6 javascript dom

如果表单中有多个具有相同表单元素的表单元素,则name表单上elements集合中的条目最终将成为这些字段的集合(这很方便).DOM2 HTML规范涵盖了elements集合,但是当有多个具有相同名称的字段时,似乎不会立即指定此行为.标准是否涵盖了行为(DOM2 HTML规范中的其他地方,或其他规范中)?

为清楚起见,我不是问问访问这些领域的最佳方式是什么.我问他们最终收集在一个集合(不同种类)的事实是否elements由标准涵盖,如果是这样的话.

示例(实时复制):

HTML:

<form id="theForm">
<input type="text" name="foo" value="one">
<input type="text" name="foo" value="two">
</form>
Run Code Online (Sandbox Code Playgroud)

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

示例输出(适用于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[虽然奇怪的是Safari浏览器上的typeof是"功能"而不是"对象"],和IE和Opera使它成为一个HTMLCollection,但他们都有length,item[]访问).我只是想找到指定行为的标准(如果有的话).

Car*_*rey 2

HTMLFormControlsCollectionHTML5 规范草案(以及 WHAT-WG 版本)涵盖了它,在本例中,它似乎更多地是关于记录它\xe2\x80\x99s 始终如何工作,在(W3C refWHAT-WG ref )部分下):

\n\n
\n

如果有多个匹配项,则返回包含所有这些元素的[ HTMLFormControlsCollection( W3C ref , WHAT-WG ref ) 对象。

\n
\n