2012-06-20 19 views
14

Tôi có một lý do hợp lệ để muốn làm điều này, nhưng đó là một câu chuyện dài vì vậy tôi sẽ quên cố gắng giải thích lý do tại sao và chỉ hỏi nếu nó OK để làm.Có OK để có nhiều biểu mẫu HTML có cùng tên không?

Tôi có một trang mà tôi cần phải có nhiều biểu mẫu có cùng tên nhưng tôi chỉ muốn biểu mẫu có nút gửi được nhấp để gửi. Ví dụ: những điều sau có thể nằm trên trang của tôi:

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

Điều này có được chấp nhận không?

+0

http://validator.w3.org – BalusC

+0

http://www.onlinewebcheck.com phát hiện lỗi tên biểu mẫu trùng lặp trong tài liệu HTML5 –

+0

lý do tại sao sử dụng 'tên biểu mẫu' ở tất cả: http://stackoverflow.com/questions/ 8946320/whats-the-point-of-html-forms-name-attribute –

Trả lời

15

Về spec 4.01, bạn có thể sử dụng các phần tử form với cùng thuộc tính name vì không có yêu cầu duy nhất về chúng. Tuy nhiên, làm như vậy sẽ đánh bại mục đích của các thuộc tính đó. Chúng có nghĩa là để làm cho nó dễ dàng hơn để tham khảo các biểu mẫu trong kịch bản phía máy khách: nếu bạn có <form name=foo>, thì document.foo là biểu mẫu đó.

Không xác định điều gì sẽ xảy ra khi cùng thuộc tính name được sử dụng, nhưng những gì trình duyệt có vẻ như là trả lại mảng. Trong ví dụ của bạn, document.foo sẽ là mảng gồm 3 phần tử, với document.foo[0] là biểu mẫu đầu tiên. Nhưng điều này không hữu ích, vì (giả sử không có các biểu mẫu khác trong tài liệu) bạn có thể sử dụng document.forms[0], với một ý nghĩa được xác định rõ.

Thuộc tính name đã lỗi thời cho các phần tử form (nhưng không phải cho các trường biểu mẫu, nơi nó vẫn là bản chất cần thiết). Các HTML 4.01 spec clause on form nói:

name = CDATA [CI] Thuộc tính này tên các yếu tố để nó có thể được gọi từ các style sheet hoặc các kịch bản. Chú thích. Thuộc tính này đã được đưa vào để tương thích ngược. Các ứng dụng nên sử dụng thuộc tính id để xác định các yếu tố. ”

Trong bản nháp HTML5, ngay cả các quy tắc chính thức cũng không cho phép sử dụng cùng thuộc tính name. HTML5 clause on the name attribute on form nói rằng giá trị của nó “phải là duy nhất trong số các phần tử form trong bộ sưu tập forms mà nó nằm trong, nếu có”. Đây là một công thức khó hiểu, nhưng nó là an toàn nhất để cho rằng nó phải là duy nhất trong các phần tử form của một tài liệu.

+0

Các bit về document.foo cho các trường hợp nhiều tên phù hợp được undefined, không phải là những gì phần 3.1.4 DOM cây truy cập từ http://dev.w3.org/html5/spec/dom.html#dom-document -namedItem-mà đến cuối 3.1.4 định nghĩa? – Alohci

+0

@Alohci, không được xác định trong thông số kỹ thuật hiện tại. Bản nháp HTML5 xác định một cơ chế cho điều này, nhưng nó cũng áp đặt một yêu cầu duy nhất. –

+0

Vâng, điểm công bằng. Thảo luận về HTML 4 là gì, HTML5 là gì và các tác nhân người dùng * làm gì, vì chúng không có các chế độ HTML 4 và HTML5 riêng biệt, đôi khi rất phức tạp. – Alohci

10

Có được phép, chỉ id phải là duy nhất. Tôi sẽ không khuyên bạn nên nó tuy nhiên, tại sao ngay cả đặt mình vào một vị trí để được bối rối xuống đường.

Thuộc tính name chỉ xác định nội dung của từng phần tử trường sẽ được biểu diễn như khi được gửi đến máy chủ.

+5

Thuộc tính 'name' của phần tử' form' không ảnh hưởng đến dữ liệu được gửi đến máy chủ.Bạn có thể đã nhầm lẫn nó với các thuộc tính 'name' cho các trường biểu mẫu. –

0

Khi người dùng nhấp vào nút gửi, chỉ biểu mẫu đó sẽ được thực hiện. Tuy nhiên, tốt hơn nên đặt tên cho chúng để bạn không bị nhầm lẫn :)

1

Nó cũng được chấp nhận trong HTML5. Chỉ tên phải là duy nhất bên trong biểu mẫu.

Xem tài liệu: "Giá trị không được là chuỗi trống và giá trị phải là duy nhất trong số các phần tử biểu mẫu trong bộ sưu tập biểu mẫu ở trong đó, nếu có."

+1

Điều này có thể gây hiểu lầm. Trong HTML5, [W3C yêu cầu] (https://www.w3.org/TR/html5/forms.html#attr-form-name) ** biểu mẫu ** 'name' là duy nhất trong một bộ sưu tập biểu mẫu , nếu có. Nhưng tên của các phần tử trong một biểu mẫu có thể là [bất kỳ chuỗi không trống nào] (https://www.w3.org/TR/html5/forms.html#attr-fe-name) ngoại trừ \ __ bảng mã \ __ và _isindex_. – Qdeep

Các vấn đề liên quan