2013-04-19 13 views
53

wiem o atrybucie readonly dla text input, jednak podczas czytania kodu z innych stron (brzydki zwyczaj kopalni) widziałem więcej niż jedno wykonanie dla niego:Jaka jest poprawna składnia atrybutu readonly dla wejściowych elementów tekstowych?

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

i

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

i ja nawet widziałem

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

..i wierzę, widziałem nawet więcej, ale nie pamiętam dokładnej składni teraz ..

Który z nich jest prawidłowy i powinienem go użyć?

+0

możliwy duplikat stackoverflow.com/questions/1033944/... ponieważ oba są atrybutami boolowskimi (niezarejestrowanymi), są blisko spokrewnione, ale skupiają się na statusach implementacji zamiast standardowych: [jaka jest różnica między readonly = "true" a readonly = "readonly"] (http://stackoverflow.com/questions/6172911/what-is-the-difference-between-readonly-true-readonly-readonly) –

Odpowiedz

64

Z w3:

tylko do odczytu = „tylko do odczytu” lub „” (pusty łańcuch) lub pusty - Określa ten element stanowi kontrolną, której wartość nie jest przeznaczona do edytowane.

W zasadzie jest taki sam.

+2

@OmerkKronen to zadziała, czytaj więcej [tutaj] (http: //stackoverflow.com/questions/6172911/what-is-the-difference-between-readonly-true-readonly-readonly). – Vucko

+12

Nawet jeśli zadziała, nie oznacza to, że powinieneś go używać. Moim zaleceniem jest trzymać się standardu. Nie wprowadzaj błędów tylko dlatego, że możesz. –

+1

@MrLister Standard zaleca stosowanie się do standardu, który, mimo że jest okrągły, niesie ze sobą więcej wagi :) – aross

4

Należy mieć

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

To tylko jeden z trzech ważnych formularzy. Odpowiedź Ciro Santilliego jest znacznie lepsza. – ToolmakerSteve

53

HTML5 Spec:

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

atrybut tylko do odczytu, jest wartością logiczną atrybut

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

Obecność atrybutu boolean dla elementu reprezentuje wartość true, a brak atrybutu reprezentuje wartość false.

Jeśli atrybut jest obecny, jego wartość musi być pustym ciągiem lub wartością, która nie jest dopasowana do wielkości liter ASCII dla nazwy kanonicznej atrybutu, bez początkowych lub końcowych białych znaków.

Wnioski:

Poniżej ważny, równoważne i prawdziwe:

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

Poniżej nieprawidłowy:

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

Brak atrybutu jest ważna tylko składnia fałszywego:

<input type="text"/> 

Zalecenie

Jeśli dbasz o napisaniu poprawnego XHTML, użyj readonly="readonly", ponieważ <input readonly> jest nieważny i inne alternatywy są mniej czytelny. Poza tym po prostu użyj <input readonly>, ponieważ jest krótszy.

+4

Dzięki za wskazanie, co jest absolutnym bodźcem w mózgu, specyfikacja: według projektu nie można obliczyć wartości atrybutu, aby przełączyć (np. - szablon HTML na dowolnym serwerze - PHP/JSP/ASP - lub klienta - Angular - z prawdą/false w wartości atrybutu). Musisz WYŁĄCZ atrybut, aby go wyłączyć. Nikt w komisji nie zdawał sobie sprawy, co to było za zepsucie ??? – Roboprog

+0

@Roboprog haha, prawda, to trochę denerwujące. –

+1

Bardzo dobrze wyjaśnione. To powinna być zaakceptowana odpowiedź. –

Powiązane problemy