Если у вас есть несколько элементов формы с одинаковым name
в форме, запись в коллекции elements
в форме заканчивается коллекцией этих полей (что удобно). HTML-спецификация DOM2 охватывает коллекцию elements
, но, похоже, не сразу определяет это поведение при наличии нескольких полей с одинаковым именем. Охвачено ли поведение стандартом (где-то еще в спецификации HTML DOM2 или в другой спецификации)?
Для ясности я не спрашиваю, как лучше всего получить доступ к этим полям. Я спрашиваю, охватывается ли стандартом тот факт, что они попадают в коллекцию (разных видов) в коллекции elements
, и если да, то в каком именно.
Пример ( живая копия ):
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
[хотя странно в Safari typeof
является «функцией», а не «объектом»], а IE и Opera делают его HTMLCollection
, но все они имеют length
, item
и []
доступ). Я просто пытаюсь найти стандарт, если таковой имеется, который определяет поведение.