如果表单中有多个具有相同表单元素的表单元素,则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和[]访问).我只是想找到指定行为的标准(如果有的话).
HTMLFormControlsCollectionHTML5 规范草案(以及 WHAT-WG 版本)涵盖了它,在本例中,它似乎更多地是关于记录它\xe2\x80\x99s 始终如何工作,在(W3C ref、WHAT-WG ref )部分下):
\n\n如果有多个匹配项,则返回包含所有这些元素的[
\nHTMLFormControlsCollection( W3C ref , WHAT-WG ref ) 对象。