Qual è il valore corretto per un attributo controllato di una casella di controllo HTML?


436

Sappiamo tutti come formare un input per la casella di controllo in HTML:

<input name="checkbox_name" id="checkbox_id" type="checkbox">

Quello che non so: qual è il valore tecnicamente corretto per una casella di controllo selezionata? Ho visto tutto questo funzionare:

<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 risposta è che non importa? Non vedo alcuna prova per la risposta contrassegnata come corretta qui dalla specifica stessa:

Le caselle di controllo (e i pulsanti di opzione) sono interruttori on / off che possono essere attivati ​​/ disattivati ​​dall'utente. Un interruttore è "on" quando è impostato l'attributo controllato dell'elemento di controllo. Quando viene inviato un modulo, solo i controlli "on" possono avere esito positivo. Diverse caselle di controllo in un modulo possono condividere lo stesso nome di controllo. Pertanto, ad esempio, le caselle di controllo consentono agli utenti di selezionare diversi valori per la stessa proprietà. L'elemento INPUT viene utilizzato per creare un controllo checkbox.

Cosa direbbe uno scrittore di specifiche è la risposta corretta? Fornisci risposte basate su prove.


Nel riepilogo della domanda menzioni il valore per l'attributo controllato, tuttavia nella descrizione della domanda si discute il valore corretto per una casella di controllo selezionata. Il "valore" della casella di controllo è diverso dall'attributo selezionato, credo che nella descrizione della tua domanda intendessi anche il valore dell'attributo, forse ti piacerebbe modificare la descrizione della domanda. Per il "valore" di una revisione casella di controllo stackoverflow.com/questions/14323899/...
melutovich

Risposte:


451

A rigor di termini, dovresti mettere qualcosa di sensato - secondo le specifiche qui , la versione più corretta è:

<input name=name id=id type=checkbox checked=checked>

Per HTML, è possibile anche utilizzare la sintassi dell'attributo vuoto , checked=""o anche semplicemente checked(di una più rigorosa XHTML, questo è non è supportato ).

In effetti, tuttavia, la maggior parte dei browser supporterà qualsiasi valore tra virgolette. Verranno verificati tutti i seguenti elementi:

<input name=name id=id type=checkbox checked>
<input name=name id=id type=checkbox checked="">
<input name=name id=id type=checkbox checked="yes">
<input name=name id=id type=checkbox checked="blue">
<input name=name id=id type=checkbox checked="false">

E solo le seguenti opzioni saranno deselezionate:

<input name=name id=id type=checkbox>

Vedi anche questa domanda simile su disabled="disabled".


39
Questo è sbagliato. Se guardi la specifica , dice: checked (checked)che significa "L'attributo controllato può avere il valore 'controllato'). Solo checkedun valore accettabile, nessuno degli altri lo sono. Gli attributi booleani ti consentono di omettere tutto tranne il valore, quindi checkedè accettabile così come checked="checked".
Quentin

14
Una pagina W3 HTML5 orientato dice che checked, checked=""e checked="checked"sono OK. w3.org/TR/html-markup/input.checkbox.html
Ryan Williams

1
@Quentin mi scuso, quella frase non ha senso per me. Volevi dire che puoi omettere tutto tranne il nome dell'attributo? Perché se potessi omettere tutto tranne il valore , potresti semplicemente scrivere "checked", senza il nome dell'attributo, e farlo funzionare correttamente.
Hannele,

4
@Quentin tl, dr: è una semantica, ma la sintassi dell'attributo vuota specifica solo il nome dell'attributo, non il valore .
Hannele,

1
Se la casella di controllo rimane selezionata (quando si ricarica la pagina) nonostante si ometta l' attributo booleano / vuoto checked , utilizzare autocomplete = "off" per impedire al browser di controllarlo automaticamente.
gestire il

58

Specifiche HTML5 :

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

L'attributo del contenuto disabilitato è un attributo booleano.

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

La presenza di un attributo booleano su un elemento rappresenta il valore vero e l'assenza dell'attributo rappresenta il valore falso.

Se l'attributo è presente, il suo valore deve essere una stringa vuota o un valore che corrisponde a una corrispondenza maiuscole / minuscole ASCII per il nome canonico dell'attributo, senza spazi bianchi iniziali o finali.

Conclusione :

Sono validi, equivalenti e veri :

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

Non sono validi :

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

L'assenza dell'attributo è l'unica sintassi valida per false :

<input />

Raccomandazione

Se ti interessa scrivere XHTML valido, usa checked="checked", poiché <input checked>XHTML non valido (ma HTML valido) e altre alternative sono meno leggibili. Altrimenti, usa solo <input checked>perché è più corto.


2
Ho deciso di tornare indietro per modificare 2 e mantenere prima le specifiche. Mentre gli esempi prima sono la strada da percorrere in generale, ritengo che questo sia l'aspetto differenziante di questa risposta rispetto agli attuali migliori che forniscono solo esempi. Grazie per il suggerimento però :-)
Ciro Santilli 11 冠状 病 六四 事件 法轮功

2
Penso che questa sia la risposta corretta, sottolineando che l'assenza significa falso. Mentre = "true" funziona, ciò implica che = "false" funzionerebbe come desiderato e non funziona.
aamarks

35
<input ... checked />
<input ... checked="checked" />

Quelli sono ugualmente validi. E in JavaScript:

input.checked = true;
input.setAttribute("checked");
input.setAttribute("checked","checked");

4
setAttribute modifica il markup DOM , non è necessario assegnarlo alla proprietà.
user2864740

input.setAttribute("checked")TypeError: Impossibile eseguire 'setAttribute' su 'Element': sono richiesti 2 argomenti, ma solo 1 presente
Ivan Rave

@IvanRave Alcuni browser sono pedanti al riguardo, altri funzioneranno bene.
Niet the Dark Absol,


5
  1. verificato
  2. checked = ""
  3. checked = "checked"

    sono equivalenti;


secondo la casella di controllo delle specifiche '---- ⓘ checked = "checked" o "" (stringa vuota) o vuoto Specifica che l'elemento rappresenta un controllo selezionato .---'


2

È una città piuttosto folle che l'unico modo per rendere falsi i check sia quello di omettere qualsiasi valore. Con Angular 1.x, puoi farlo:

  <input type="radio" ng-checked="false">

che è molto più sano, se è necessario renderlo non controllato.


2

Penso che questo possa aiutare:


Prima leggi tutte le specifiche da Microsoft e W3.org.
Vedresti che l'impostazione dell'elemento effettivo di una casella di controllo deve essere eseguita su ELEMENT PROPERTY, non sull'interfaccia utente o sull'attributo.
$('mycheckbox')[0].checked

In secondo luogo, è necessario essere consapevoli del fatto che l'attributo controllato RITORNA una stringa "vero", "falso"
Perché è importante? Perché è necessario utilizzare il tipo corretto. Una stringa, non un booleano. Questo è importante anche quando si analizza la casella di controllo.
$('mycheckbox')[0].checked = "true"

if($('mycheckbox')[0].checked === "true"){ //do something }

È inoltre necessario rendersi conto che ATTRIBUTO "selezionato" serve per impostare inizialmente il valore della casella di controllo. Questo non fa molto una volta che l'elemento viene renderizzato nel DOM. Immagina che funzioni quando la pagina web viene caricata e inizialmente analizzata.
Vado con le preferenze di IE su questo:<input type="checkbox" checked="checked"/>

Infine, l'aspetto principale della confusione per una casella di controllo è che l'elemento dell'interfaccia utente della casella di controllo non è uguale al valore della proprietà dell'elemento. Non sono direttamente correlati. Se lavori in .net, scoprirai che l'utente "spuntando" una casella non riflette mai il valore bool effettivo passato al controller. Per impostare l'interfaccia utente, utilizzo entrambi $('mycheckbox').val(true);e$('mycheckbox').attr('checked', 'checked');


In breve, per una casella di controllo selezionata è necessario:
DOM iniziale: <input type="checkbox" checked="checked">
Proprietà elemento: $('mycheckbox')[0].checked = "true";
UI: $('mycheckbox').val(true);e$('mycheckbox').attr('checked', 'checked');


-3

Bene, per usarlo non penso sia importante (simile a disabilitato e di sola lettura), personalmente uso controllato = "controllato" ma se stai cercando di manipolarli con JavaScript, usi vero / falso


5
No. E non importa (si conta per disablede readonlytroppo), anche se il recupero di errore del browser è piuttosto buona. Se vuoi manipolare l' attributo con JS, dovresti comunque usare checkedo removeAttribute('checked'). La checked proprietà accetta trueo false.
Quentin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.