Nếu bạn có nhiều phần tử biểu mẫu có cùng một hình thức, mục nhập trong bộ sưu tập elements
trên biểu mẫu sẽ kết thúc là một tập hợp các trường đó (tiện dụng). Đặc tả HTML DOM2 covers the elements
collection nhưng dường như không xác định ngay hành vi này khi có nhiều trường có cùng tên. Hành vi có được bao gồm bởi một tiêu chuẩn (một nơi khác trong đặc tả HTML DOM2 hay trong một đặc tả khác) không?Các phần tử biểu mẫu có cùng tên được phản ánh trong DOM
Để rõ ràng, tôi không hỏi cách tốt nhất để truy cập các trường này là gì. Tôi hỏi liệu thực tế họ kết thúc trong một bộ sưu tập (của các loại khác nhau) trên bộ sưu tập elements
được bao phủ bởi một tiêu chuẩn, và nếu như vậy mà một.
Ví dụ (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);
}
}
Mẫu đầu ra (đối với Chrome):
typeof foo = object Object#toString says: [object NodeList] Looks like a collection of some kind: 0: one 1: two
Tôi đã kiểm tra IE6 , 7, 8, một d 9, Firefox 4.0, Firefox 3.6, Chrome 12, Opera 11 và Safari 5. Tất cả đều tạo mục nhập trong elements
một bộ sưu tập của một số loại (Chrome, Firefox và Safari làm cho nó là NodeList
[mặc dù kỳ lạ trên Safari là typeof
là "function" not "object"] và IE và Opera biến nó thành HTMLCollection
, nhưng tất cả đều có số length
, item
và truy cập []
). Tôi chỉ cố gắng tìm tiêu chuẩn, nếu có, chỉ định hành vi.
Tại sao không sử dụng document.getElementsByName ("fieldNAME") trả về mảng trong tất cả các trình duyệt – mplungjan
@mplungjan: @ T.J. chỉ muốn biết liệu hành vi này có được định nghĩa ở đâu đó không. –
@mplungjan: Trích dẫn: * "Tôi không hỏi cách tốt nhất để truy cập các trường này là gì. Tôi hỏi liệu thực tế chúng kết thúc trong một bộ sưu tập (các loại khác nhau) trên bộ sưu tập' elements' có được bao hàm hay không một tiêu chuẩn, và nếu như vậy mà một. "* Tôi biết tôi có thể sử dụng' getElementsByName' (mặc dù nó sẽ cho tôi ** tất cả ** của các yếu tố với tên đó, không chỉ là những người trong các hình thức). Điểm của câu hỏi là tiêu chuẩn. –