Элементы формы с тем же именем отражаются в DOM - PullRequest
6 голосов
/ 28 июня 2011

Если у вас есть несколько элементов формы с одинаковым 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 и [] доступ). Я просто пытаюсь найти стандарт, если таковой имеется, который определяет поведение.

Ответы [ 2 ]

2 голосов
/ 28 июня 2011

Он покрыт черновой спецификацией HTML5 (и версией WHAT-WG), которая в данном случае больше похожа на документирование того, как она всегда работает, в разделе HTMLFormControlsCollection ( W3C ref , WHAT-WG ref ):

Если имеется несколько совпадающих элементов, то [HTMLFormControlsCollection ( W3C ref , WHAT-WG ref) возвращается объект, содержащий все эти элементы.

0 голосов
/ 28 июня 2011

Кажется, что есть разница между доступом к формам и доступом к DOM в Firefox 4.0.1 и 5

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

документ.getElementsByName ("foo"):

typeof docFoo = object
Object#toString says: [object HTMLCollection]
Looks like a collection of some kind:
0: one
1: two
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...