2012-01-20 39 views
41

Điểm của thuộc tính name trên biểu mẫu HTML là gì? Theo như tôi có thể nói, bạn không thể đọc tên biểu mẫu khi gửi hoặc làm bất kỳ điều gì khác với tên đó. Nó có phục vụ một mục đích không?Điểm HTML của thuộc tính `name` là gì?

+3

đưa tôi một lúc để nhận ra bạn chỉ đang phân vân về thuộc tính 'name' trên thẻ'

', không phải thuộc tính' tên' trên '' thẻ trong một '' – mmcrae

Trả lời

43

Nói tóm lại, và có lẽ quá đơn giản một chút: Nó được sử dụng thay vì id cho các trình duyệt không hiểu document.getElementById.

Những ngày này, nó không phục vụ mục đích thực sự. Đó là di sản từ những ngày đầu của cuộc chiến trình duyệt trước khi sử dụng name để mô tả cách gửi giá trị kiểm soát khi biểu mẫu được gửi và id để xác định yếu tố trong trang đã được giải quyết.

+3

Vâng, một câu trả lời thực sự. Cảm ơn bạn. Không biết rằng về trình duyệt không hiểu 'document.getElementById' .. Tôi đoán chúng ta có thể bỏ qua những cái đó, huh? –

+0

Tôi đã nghi ngờ là nhiều – Yarin

+2

Nó vẫn có một mục đích: 'type = radio' và' type = checkbox' yêu cầu thuộc tính 'name' để chia sẻ tên điều khiển (ví dụ, cùng một nhóm) [W3 spec] (http: // www.w3.org/TR/html401/interact/forms.html#control-name) – charles

10

Từ the spec:

Thuộc tính name đại diện cho tên của form trong bộ sưu tập forms.

+0

Thú vị- Tôi chưa bao giờ phải phân biệt các biểu mẫu trong một bộ sưu tập trước đây - có lẽ đây là trường hợp sử dụng thực sự? – Yarin

+2

@Yarin - Bạn có thể sử dụng 'id' cho điều đó. – Quentin

+0

@ Quentin- ok, vì vậy đây là một trường hợp sử dụng siêu khác rõ ràng – Yarin

5

Khi bạn gán một tên cho một phần tử, bạn có thể tham khảo yếu tố mà qua document.name_of_element khắp mã của bạn. Không làm việc quá biết khi nào bạn đã có nhiều lĩnh vực cùng tên, nhưng nó cho phép các phím tắt như:

<form name="myform" ...> 

document.myform.submit(); 

thay vì

document.getElementsByName('myform')[0].submit(); 
+2

Bạn có thể làm điều này bằng ID mặc dù, vì vậy nếu đó là trường hợp sử dụng duy nhất nó không thực sự quan trọng – Yarin

+0

@Yarin làm thế nào bạn có thể làm điều đó bằng 'id'? 'document.id' không hoạt động, trừ khi bạn thêm các phương thức nguyên mẫu vào nó cho mục đích này ... – vaxquis

1

Bạn có thể sử dụng thuộc tính name làm thuộc tính "thông tin bổ sung" - tương tự như đầu vào bị ẩn - nhưng điều này sẽ giúp thêm thông tin vào biểu mẫu, điều này giúp việc đọc/truy cập trở nên đơn giản hơn một chút.

+0

Đừng làm điều đó. Đầu vào ẩn chứa dữ liệu sẽ được gửi đến máy chủ. Thuộc tính 'name' của một phần tử biểu mẫu sẽ không được. Nếu bạn muốn cung cấp thêm dữ liệu hoàn toàn cho mã phía máy khách để truy cập, thì các thuộc tính 'data- *' được cung cấp rõ ràng cho mục đích đó. – Quentin

0

Đây là những gì MDN có thể nói về nó:

name
Tên của biểu mẫu. Trong HTML 4, việc sử dụng nó không được dùng nữa (id nên được sử dụng thay thế). Nó phải là duy nhất trong số các hình thức trong một tài liệu và không chỉ là một chuỗi rỗng trong HTML 5.

(từ https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-name)

tôi thấy nó hơi khó hiểu mà xác định rằng nó phải là duy nhất, không có sản phẩm nào chuỗi trong HTML 5 khi nó không được chấp nhận trong HTML 4. (Tôi đoán rằng yêu cầu đó chỉ áp dụng nếu thuộc tính name được chỉ định ở tất cả?). Nhưng tôi nghĩ thật an toàn để nói rằng bất kỳ mục đích nào mà nó từng được phục vụ đã bị thay thế bởi thuộc tính id.

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