Nous savons tous comment former une entrée de case à cocher en HTML:
<input name="checkbox_name" id="checkbox_id" type="checkbox">
Ce que je ne sais pas - quelle est la valeur techniquement correcte pour une case cochée? J'ai vu tout cela fonctionner:
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked>
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="on">
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="yes">
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="checked">
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="true">
La réponse est-elle que cela n'a pas d'importance? Je ne vois aucune preuve pour la réponse marquée comme correcte ici de la spécification elle-même:
Les cases à cocher (et les boutons radio) sont des interrupteurs marche / arrêt qui peuvent être basculés par l'utilisateur. Un interrupteur est "activé" lorsque l'attribut vérifié de l'élément de contrôle est défini. Lorsqu'un formulaire est soumis, seuls les contrôles de case à cocher "on" peuvent réussir. Plusieurs cases à cocher dans un formulaire peuvent partager le même nom de contrôle. Ainsi, par exemple, les cases à cocher permettent aux utilisateurs de sélectionner plusieurs valeurs pour la même propriété. L'élément INPUT est utilisé pour créer un contrôle de case à cocher.
Selon un rédacteur de spécifications, quelle est la bonne réponse? Veuillez fournir des réponses fondées sur des preuves.
la source
Réponses:
À strictement parler, vous devriez mettre quelque chose qui a du sens - selon les spécifications ici , la version la plus correcte est:
Pour HTML, vous pouvez également utiliser la syntaxe d'attribut vide ,
checked=""
ou même simplementchecked
(pour plus stricte XHTML, c'est pas pris en charge ).Cependant, la plupart des navigateurs prendront en charge à peu près n'importe quelle valeur entre les guillemets. Tous les éléments suivants seront vérifiés:
Et seuls les éléments suivants seront décochés:
Voir aussi cette question similaire sur
disabled="disabled"
.la source
checked (checked)
ce qui signifie "L'attribut vérifié peut avoir la valeur 'vérifié'). Seulechecked
est une valeur acceptable, aucune des autres ne l'est. Les attributs booléens vous permettent de tout omettre sauf la valeur doncchecked
est acceptable ainsi quechecked="checked"
.checked
,checked=""
etchecked="checked"
sont OK. w3.org/TR/html-markup/input.checkbox.html"checked"
, sans le nom de l'attribut, et le faire fonctionner correctement.checked
, utilisez autocomplete = "off" pour empêcher votre navigateur de le vérifier automatiquement.Spécifications HTML5 :
http://www.w3.org/TR/html5/forms.html#attr-input-checked :
http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :
Conclusion :
Les éléments suivants sont valides, équivalents et vrais :
Les éléments suivants ne sont pas valides :
L'absence de l'attribut est la seule syntaxe valide pour false :
Recommandation
Si vous vous intéressez à l'écriture de XHTML valide, utilisez
checked="checked"
, car<input checked>
n'est pas valide XHTML (mais HTML valide) et les autres alternatives sont moins lisibles. Sinon, utilisez-le<input checked>
car il est plus court.la source
Ce sont également valables. Et en JavaScript:
la source
input.setAttribute("checked")
TypeError: Échec de l'exécution de 'setAttribute' sur 'Element': 2 arguments requis, mais 1 seul présenttu veux ça je pense:
checked='checked'
la source
vérifié = "vérifié"
sont équivalents;
selon la case à cocher spéc. '---- ⓘ vérifié = "vérifié" ou "" (chaîne vide) ou vide Spécifie que l'élément représente un contrôle sélectionné .---'
la source
C'est une ville assez folle que la seule façon de rendre faux vérifié est d'omettre toutes les valeurs. Avec Angular 1.x, vous pouvez faire ceci:
ce qui est beaucoup plus sain d'esprit, si vous devez le désactiver.
la source
Je pense que cela peut aider:
Lisez d'abord toutes les spécifications de Microsoft et W3.org.
Vous verriez que la définition de l'élément réel d'une case à cocher doit être effectuée sur la propriété ELEMENT, et non sur l'interface utilisateur ou l'attribut.
$('mycheckbox')[0].checked
Deuxièmement, vous devez savoir que l'attribut vérifié RETOURNE une chaîne "true", "false"
Pourquoi est-ce important? Parce que vous devez utiliser le bon type. Une chaîne, pas un booléen. Cela est également important lors de l'analyse de votre case à cocher.
$('mycheckbox')[0].checked = "true"
if($('mycheckbox')[0].checked === "true"){ //do something }
Vous devez également vous rendre compte que l'attribut "coché" sert à définir initialement la valeur de la case à cocher. Cela ne fait pas grand chose une fois que l'élément est rendu dans le DOM. Imaginez que cela fonctionne lorsque la page Web se charge et est initialement analysée.
Je vais aller avec la préférence d'IE sur celui-ci:
<input type="checkbox" checked="checked"/>
Enfin, l'aspect principal de la confusion pour une case à cocher est que l'élément d'interface utilisateur de case à cocher n'est pas identique à la valeur de propriété de l'élément. Ils ne sont pas directement en corrélation. Si vous travaillez en .net, vous découvrirez que l'utilisateur "vérifiant" une case à cocher ne reflète jamais la valeur booléenne réelle transmise au contrôleur. Pour définir l'interface utilisateur, j'utilise à la fois
$('mycheckbox').val(true);
et$('mycheckbox').attr('checked', 'checked');
En bref, pour une case cochée, vous avez besoin:
DOM initial:
<input type="checkbox" checked="checked">
Propriété de l'élément:
$('mycheckbox')[0].checked = "true";
UI:
$('mycheckbox').val(true);
et$('mycheckbox').attr('checked', 'checked');
la source
Eh bien, pour l'utiliser, je ne pense pas que les choses soient importantes (similaire à désactivé et en lecture seule), personnellement, j'utilise vérifié = "vérifié" mais si vous essayez de les manipuler avec JavaScript, vous utilisez vrai / faux
la source
disabled
etreadonly
aussi) , même si la récupération d'erreur du navigateur est assez bon. Si vous souhaitez manipuler l' attribut avec JS, vous devez toujours utiliserchecked
ouremoveAttribute('checked')
. Lachecked
propriété prendtrue
oufalse
.