web-dev-qa-db-fra.com

Quelles valeurs pour vérifié et sélectionné sont fausses?

Je pense que selon les spécifications W3, vous êtes censé faire

<input type="checkbox" checked="checked" />

Et

 selected="selected"

Mais, la plupart des navigateurs l’accepteront, il vous suffit d’écrire "CHECKED" (vérifier) ​​et de ne pas lui donner de valeur. Alors, si vous incluez l'attribut, y a-t-il des valeurs qui seraient (systématiquement) considérées comme fausses?

53
mpen

Il y a pas de valeurs qui va décocher la case. Si l'attribut checked existe, la case à cocher sera cochée quelle que soit la valeur que vous lui attribuez.

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="unchecked" />
<input type="checkbox" checked="true" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="on" />
<input type="checkbox" checked="off" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="0" />
<input type="checkbox" checked="yes" />
<input type="checkbox" checked="no" />
<input type="checkbox" checked="y" />
<input type="checkbox" checked="n" />

Rend tout vérifié dans tous les navigateurs modernes (FF3.6, Chrome 10, IE8).

91
mpen

Les attributs checked et selected ne sont autorisés que pour deux valeurs, qui sont une copie du nom de l'attribut et (à partir de HTML 5) une chaîne vide. Donner toute autre valeur est une erreur.

Si vous ne souhaitez pas définir l'attribut, l'intégralité de cet attribut doit être omis.

Notez que dans HTML 4 , vous pouvez tout omettre sauf la valeur. HTML 5 a changé cela pour omettre tout sauf le nom (ce qui ne fait aucune différence pratique).

Ainsi, l'ensemble complet (à part les variations de cAsE) de représentations valides de l'attribut est le suivant:

<input ... checked="checked"> <!-- All versions of HTML / XHTML -->
<input ...          checked > <!-- Only HTML 4.01 and earlier -->
<input ... checked          > <!-- Only HTML 5 and later -->
<input ... checked=""       > <!-- Only HTML 5 and later -->

Les documents au format text/html (HTML ou XHTML) seront alimentés via un analyseur balise soupe, et la présence d'un attribut vérifié (avec une valeur quelconque) sera traitée comme "Cet élément doit être vérifié". Ainsi, bien que non valide, checked="true", checked="yes", et checked="false" va tous déclencher l'état coché.

Je n'ai jamais eu envie de savoir quels mécanismes de récupération d'erreur sont en place pour le mode d'analyse XML si l'attribut devait recevoir une valeur différente, mais je voudrais m'attendre que l'héritage de HTML et/ou une simple erreur de reprise le traiterait de la même manière: si l'attribut est là, l'élément est vérifié.

(Et tout ce qui précède s'applique également à selected comme à checked.)

35
Quentin

Aucune valeur n'est considérée comme fausse , seule l'absence de l'attribut. Il existe cependant de nombreuses valeurs non valides, et certaines implémentations peuvent considérer certaines valeurs non valides comme fausses.

Spéc. HTML5

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

L'attribut de contenu désactivé est un attribut booléen.

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

La présence d'un attribut booléen sur un élément représente la valeur vraie et l'absence de l'attribut représente la valeur fausse.

Si l'attribut est présent, sa valeur doit correspondre à la chaîne vide ou à une correspondance ASCII) sans correspondance entre les majuscules et les minuscules pour le nom canonique de l'attribut, sans espace blanc de début ni de fin.

Conclusion

Les éléments suivants sont valides, équivalents et vrais :

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="ChEcKeD" />

Les éléments suivants sont non valides :

<input type="checkbox" checked="0" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="true" />

L'absence de l'attribut est la seule syntaxe valide pour false :

<input type="checkbox" />

Recommandation

Si vous souhaitez écrire du XHTML valide, utilisez checked="checked", puisque <input checked> n'est pas valide et les autres alternatives sont moins lisibles. Sinon, il suffit d'utiliser <input checked> comme c'est plus court.

La chaîne vide est fausse en règle générale.

Apparemment, la chaîne vide n'est pas considérée comme vide dans tous les navigateurs et la présence de l'attribut vérifié est considérée comme signifiant vérifié. Donc, tout l'attribut doit être présent ou omis.

4
Orbling

En réalité, la spécification HTML 4.01 indique que ces attributs ne nécessitent pas de valeurs. Personnellement, je n'ai pas rencontré de situation dans laquelle fournir une valeur rendait ces contrôles non sélectionnés.

Voici les liens respectifs vers le document de spécification pour sélectionné et coché .

Edit: Firebug affiche la case à cocher comme cochée, quelles que soient les valeurs que je mette entre guillemets pour l'attribut vérifié (y compris en tapant simplement "vérifié" sans aucune valeur) , et IE 8 obligent à cocher = "coché". Je ne sais pas s'il existe des outils similaires pour les autres navigateurs susceptibles de modifier l'état de rendu d'une case à cocher.

4
jwheron