Jaka jest prawidłowa wartość wyłączonego atrybutu?

167

Jaka jest prawidłowa wartość disabledatrybutu dla pola tekstowego lub obszaru tekstowego?

Widziałem wcześniej używane:

<input type="text" disabled />
<input type="text" disabled="disabled" />
<input type="text" disabled="true" />
tskuzzy
źródło
5
Atrybuty muszą mieć wartość, nawet dla atrybutów, których sama obecność sygnalizuje, że należy coś zrobić. disabled="false"nadal wyłączyłby element, ponieważ to OBECNOŚĆ disabledpowoduje wyłączenie, a nie wartość atrybutu.
Marc B,
Link, który zamieściłem jako komentarz do odpowiedzi js1568, potwierdza / wyjaśnia, co mówi @Marc B: whatwg.org/specs/web-apps/current-work/multipage/ ...
James Allardice
możliwy duplikat stackoverflow.com/questions/1033944/… ponieważ oba są atrybutami logicznymi (nie oflagowane)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

148
  • Dla XHTML <input type="text" disabled="disabled" />jest prawidłowym znacznikiem.
  • W przypadku HTML5 <input type="text" disabled />jest poprawne i używane przez W3C w swoich próbkach.
  • W rzeczywistości oba sposoby działają we wszystkich głównych przeglądarkach.
Erick Petrucelli
źródło
15
W html5 dane wejściowe są pustymi elementami i nie wymagają samozamykającego się ukośnika: w3.org/TR/html5/syntax.html#void-elements i w3.org/TR/html5/syntax.html#syntax-start- tag
Daniel
1
@Daniel K. Nie potrzebuje tego, chyba że robi poliglotowe znaczniki HTML / XML.
Patanjali
108

Specyfikacja HTML5 :

http://www.w3.org/TR/html5/forms.html#eneling-and-disiring-form-controls:-the-disabled-attribute :

Sprawdzony atrybut treści jest atrybutem logicznym

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

Obecność atrybutu boolowskiego w elemencie reprezentuje wartość prawdziwą, a brak atrybutu reprezentuje wartość fałszywą.

Jeśli atrybut jest obecny, jego wartością musi być pusty ciąg lub wartość będąca dopasowaniem ASCII bez rozróżniania wielkości liter dla nazwy kanonicznej atrybutu, bez wiodących lub końcowych białych znaków.

Wniosek :

Poniższe są prawidłowe, równoważne i prawdziwe :

<input type="text" disabled />
<input type="text" disabled="" />
<input type="text" disabled="disabled" />
<input type="text" disabled="DiSaBlEd" />

Poniższe są nieprawidłowe :

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

Brak atrybutu jest jedyną prawidłową składnią dla fałszu :

<input type="text" />

Rekomendacje

Jeśli zależy ci na pisaniu poprawnego XHTML, użyj disabled="disabled", ponieważ <input disabled>jest nieprawidłowy, a inne alternatywy są mniej czytelne. W przeciwnym razie używaj, <input disabled>ponieważ jest krótszy.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
3
Uwaga: Jeśli używasz AngularJS i chcesz powiązać stan wyłączenia ze zmienną, możesz użyć ng-disabledzamiast tego. Podobnie jak inne atrybuty tego typu, generalnie mają one inteligentny ng-*odpowiednik
jakub.g
5
disabled={true}działa w kodzie JSX reakcji, ale jestem pewien, że zostałby transponowany tylko do jednego z prawidłowych / dozwolonych formatów HTML5.
RBT
1

Właśnie wypróbowałem je wszystkie i dla IE11 jedyną rzeczą, która wydaje się działać, jest disabled = „true”. Wartości wyłączenia lub brak podanej wartości nie działały. W rzeczywistości, jsp dostał błąd, który jest równy dla wszystkich pól, więc musiałem określić disabled = "true", aby to zadziałało.

Edmond ME
źródło
1
Pytanie OP dotyczyło HTML (tj. Kontroli po stronie klienta). Patrzysz na elementy sterujące po stronie serwera; te mają różne konwencje. Zauważysz różnicę, jeśli sprawdzisz wynik HTML na swojej stronie JSP. Jeśli nadal masz wątpliwości, wypróbuj te skrzypce w IE11.
Ruud Helderman
Widziałem to samo po stronie klienta w przeglądarce IE 11. IE 11 wymusza na czymś istnienie, więc samo ustawienie wyłączenia powoduje wyświetlenie disabled = ""
Robert Achmann
1

W HTML5 nie ma poprawnej wartości, wszystkie główne przeglądarki tak naprawdę nie dbają o to, jaki jest atrybut, po prostu sprawdzają, czy atrybut istnieje, więc element jest wyłączony.

MadsHaupt
źródło