2013-04-19 18 views
53

tôi biết về readonly thuộc tính cho text input, Nhưng khi đọc mã từ các trang web khác (một thói quen khó chịu của tôi), tôi thấy nhiều hơn một thực hiện cho nó:Cú pháp thuộc tính chỉ đọc chính xác cho các phần tử văn bản đầu vào là gì?

<input type="text" value="myvalue" class="class anotherclass" readonly > 

<input type="text" value="myvalue" class="class anotherclass" readonly="readonly" > 

và Tôi đã từng thấy

<input type="text" value="myvalue" class="class anotherclass" readonly="true" > 

..Và tôi tin rằng tôi đã thấy nhiều hơn, nhưng không thể nhớ lại cú pháp chính xác ngay bây giờ ..

Vì vậy, cái nào là đúng mà tôi nên sử dụng?

+0

có thể trùng lặp stackoverflow.com/questions/1033944/… vì cả hai thuộc tính boolean (không gắn cờ), liên quan chặt chẽ nhưng tập trung vào trạng thái triển khai thay vì tiêu chuẩn: [sự khác biệt giữa readonly = "true" & readonly = "readonly"] (http://stackoverflow.com/questions/6172911/what-is-the-difference-between-readonly-true-readonly-readonly) –

Trả lời

64

Từ w3:

readonly = "readonly" hoặc "" (chuỗi rỗng) hoặc trống - Xác định yếu tố đại diện cho một điều khiển mà giá trị không có nghĩa là được đã chỉnh sửa.

Về cơ bản, nó giống nhau.

+2

@ObmerkKronen nó sẽ hoạt động, đọc thêm [ở đây] (http: //stackoverflow.com/questions/6172911/what-is-the-difference-between-readonly-true-readonly-readonly). – Vucko

+12

Ngay cả khi nó hoạt động, điều đó không có nghĩa là bạn nên sử dụng nó. Đề xuất của tôi là tuân theo tiêu chuẩn. Đừng giới thiệu lỗi chỉ vì bạn có thể. –

+1

@MrLister Tiêu chuẩn đề nghị gắn bó với tiêu chuẩn, mặc dù nó tròn, mang trọng lượng hơn :) – aross

4

là nên

<input type="text" value="myvalue" class="class anotherclass" readonly="readonly" /> 
+0

Đây chỉ là một trong ba hình thức hợp lệ. Câu trả lời của Ciro Santilli tốt hơn nhiều. – ToolmakerSteve

53

HTML5 đặc tả:

http://www.w3.org/TR/html5/forms.html#attr-input-readonly:

Thuộc tính readonly là một thuộc tính boolean

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes:

Sự hiện diện của thuộc tính boolean trên một phần tử biểu thị giá trị thực và sự vắng mặt của thuộc tính thể hiện giá trị sai.

Nếu thuộc tính hiện diện, giá trị của nó phải là chuỗi trống hoặc giá trị là một đối sánh không phân biệt chữ hoa chữ thường cho tên của tên thuộc tính, không có khoảng trống đầu hoặc cuối.

Kết luận:

Sau đây là hợp lệ, tương đương và đúng:

<input type="text" readonly /> 
<input type="text" readonly="" /> 
<input type="text" readonly="readonly" /> 
<input type="text" readonly="ReAdOnLy" /> 

Sau đây là không hợp lệ:

<input type="text" readonly="0" /> 
<input type="text" readonly="1" /> 
<input type="text" readonly="false" /> 
<input type="text" readonly="true" /> 

Sự vắng mặt của các thuộc tính là cú pháp hợp lệ chỉ cho sai:

<input type="text"/> 

Khuyến nghị

Nếu bạn quan tâm về cách viết XHTML hợp lệ, sử dụng readonly="readonly", vì <input readonly> là không hợp lệ và lựa chọn thay thế khác ít có thể đọc được. Khác, chỉ cần sử dụng <input readonly> vì nó ngắn hơn.

+4

Cảm ơn bạn đã chỉ ra một bộ não tuyệt đối fart spec là: bằng cách thiết kế, bạn không thể tính giá trị cho thuộc tính để chuyển đổi nó (ví dụ: - templated HTML trên máy chủ - PHP/JSP/ASP - hoặc client - Angular - with true/false trong giá trị thuộc tính). Bạn phải XÓA thuộc tính để tắt nó đi. NOBODY trong ủy ban nhận ra điều gì đã xảy ra? – Roboprog

+0

@Roboprog haha, đúng vậy, nó hơi khó chịu một chút. –

+1

Rất tốt giải thích. Điều này đáng lẽ phải là câu trả lời được chấp nhận. –

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