Jeśli masz wiele formularzy z tym samym name
w formularzu, pozycja w kolekcji elements
na formularzu kończy się zbiorem tych pól (co jest przydatne). Specyfikacja HTML covers the elements
collection DOM2 ale nie od razu wydają się określić ten problem, gdy istnieje wiele pól o tej samej nazwie. Czy zachowanie jest objęte standardem (gdzieś w specyfikacji HTML DOM2 lub w innej specyfikacji)?Elementy formularza o tej samej nazwie odzwierciedlone w DOM
Dla jasności, nie pytam, co jest najlepszym sposobem, aby uzyskać dostęp do tych pól jest. Pytam, czy fakt, że kończy się w zbiorze (z różnych rodzajów) z kolekcji elements
objęty jest normą, a jeśli tak, to który.
Przykład (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);
}
}
Przykładowe wyjście (dla Chrome):
typeof foo = object Object#toString says: [object NodeList] Looks like a collection of some kind: 0: one 1: two
Sprawdziłem IE6 7, 8, an d 9, Firefox 4.0, Firefox 3.6, Chrome 12, Opera 11 oraz Safari 5. Wszyscy dokonać wpisu w elements
zbiór pewnego rodzaju (Chrome, Firefox, Safari i zrobić mu NodeList
[choć dziwnie na Safari typeof
jest „funkcja” nie „obiekt”], a IE i Opera sprawiają, że jest to HTMLCollection
, ale wszystkie one mają length
, item
i []
dostępu). Po prostu próbuję znaleźć standard, jeśli taki jest, który określa zachowanie.
Dlaczego nie używać document.getElementsByName ("fieldNAME"), która zwraca tablicę we wszystkich przeglądarkach – mplungjan
@mplungjan: @ T.J. chce tylko wiedzieć, czy to zachowanie jest gdzieś zdefiniowane. –
@mplungjan: Cytując: * "Nie pytam, jaki jest najlepszy sposób dostępu do tych pól. Pytam, czy fakt, że trafiają do kolekcji (różnego rodzaju) w kolekcji" elements "jest objęty standard, a jeśli tak, to który. "* Wiem, że mogę użyć' getElementsByName' (choć dostarczy mi ** wszystkich ** elementów o tej nazwie, nie tylko tych w formularzu). Punktem pytania są standardy. –