Todos nós sabemos como formar uma entrada de caixa de seleção em HTML:
<input name="checkbox_name" id="checkbox_id" type="checkbox">
O que eu não sei - qual é o valor tecnicamente correto para uma caixa de seleção marcada? Eu já vi todos esses trabalhos:
<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">
A resposta é que isso não importa? Não vejo nenhuma evidência para a resposta marcada como correta aqui na própria especificação :
Caixas de seleção (e botões de opção) são botões liga / desliga que podem ser alternados pelo usuário. Uma opção está "ligada" quando o atributo verificado do elemento de controle está definido. Quando um formulário é enviado, apenas os controles da caixa de seleção "ativado" podem ter êxito. Várias caixas de seleção em um formulário podem compartilhar o mesmo nome de controle. Assim, por exemplo, as caixas de seleção permitem que os usuários selecionem vários valores para a mesma propriedade. O elemento INPUT é usado para criar um controle de caixa de seleção.
O que um escritor de especificações diria que é a resposta correta? Forneça respostas baseadas em evidências.
fonte
Respostas:
Estritamente falando, você deve colocar algo que faça sentido - de acordo com as especificações aqui , a versão mais correta é:
Para HTML, você também pode usar a sintaxe de atributo vazio ,
checked=""
ou mesmo simplesmentechecked
(para XHTML estrito, isto é não é suportado ).Efetivamente, no entanto, a maioria dos navegadores suporta praticamente qualquer valor entre as aspas. Todos os seguintes itens serão verificados:
E apenas o seguinte será desmarcado:
Veja também esta pergunta semelhante em
disabled="disabled"
.fonte
checked (checked)
que significa "O atributo verificado pode ter o valor 'marcado'). Somentechecked
é um valor aceitável, nenhum dos outros. Atributos booleanos permitem omitir tudo, exceto o valor, portanto,checked
é aceitável. bem comochecked="checked"
...checked
,checked=""
echecked="checked"
são OK. w3.org/TR/html-markup/input.checkbox.html"checked"
, sem o nome do atributo, e fazê-lo funcionar corretamente.checked
, use autocomplete = "off" para impedir que o navegador verifique automaticamente.Especificação HTML5 :
http://www.w3.org/TR/html5/forms.html#attr-input-checked :
http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :
Conclusão :
A seguir, são válidos, equivalentes e verdadeiros :
O seguinte é inválido :
A ausência do atributo é a única sintaxe válida para false :
Recomendação
Se você se preocupa em escrever um XHTML válido, use
checked="checked"
, pois ele<input checked>
é XHTML inválido (mas HTML válido) e outras alternativas são menos legíveis. Senão, basta usar<input checked>
, pois é mais curto.fonte
Esses são igualmente válidos. E em JavaScript:
fonte
input.setAttribute("checked")
TypeError: falha ao executar 'setAttribute' em 'Element': são necessários 2 argumentos, mas apenas 1 está presentevocê quer isso eu acho:
checked='checked'
fonte
verificado = "verificado"
são equivalentes;
de acordo com a caixa de seleção spec '---- ⓘ marcada = "marcada" ou "" (sequência vazia) ou vazia Especifica que o elemento representa um controle selecionado .---'
fonte
É uma cidade muito louca que a única maneira de tornar falso verificado é omitir quaisquer valores. Com o Angular 1.x, você pode fazer isso:
o que é muito mais sensato, se você precisar desmarcá-lo.
fonte
Eu acho que isso pode ajudar:
Leia primeiro todas as especificações da Microsoft e do W3.org.
Você verá que a configuração do elemento real de uma caixa de seleção precisa ser feita na ELEMENT PROPERTY, não na interface do usuário ou atributo.
$('mycheckbox')[0].checked
Em segundo lugar, você precisa estar ciente de que o atributo verificado retorna uma sequência de caracteres "true", "false"
Por que isso é importante? Porque você precisa usar o tipo correto. Uma string, não um booleano. Isso também é importante ao analisar sua caixa de seleção.
$('mycheckbox')[0].checked = "true"
if($('mycheckbox')[0].checked === "true"){ //do something }
Você também precisa perceber que o ATTRIBUTE "marcado" é para definir o valor da caixa de seleção inicialmente. Isso não faz muito quando o elemento é renderizado no DOM. Imagine isso funcionando quando a página da web é carregada e é analisada inicialmente.
Eu vou com a preferência do IE neste:
<input type="checkbox" checked="checked"/>
Por fim, o principal aspecto de confusão para uma caixa de seleção é que o elemento UI da caixa de seleção não é o mesmo que o valor da propriedade do elemento. Eles não se correlacionam diretamente. Se você trabalha em .net, descobrirá que o usuário "marcando" uma caixa de seleção nunca reflete o valor real do bool passado ao controlador. Para definir a interface do usuário, eu uso ambos
$('mycheckbox').val(true);
e$('mycheckbox').attr('checked', 'checked');
Em resumo, para uma caixa de seleção marcada, é necessário:
DOM inicial:
<input type="checkbox" checked="checked">
propriedade do elemento:
$('mycheckbox')[0].checked = "true";
UI:
$('mycheckbox').val(true);
e$('mycheckbox').attr('checked', 'checked');
fonte
Bem, para usá-lo, eu não acho que importa (semelhante a desativado e somente leitura), pessoalmente eu uso o check = = "check", mas se você está tentando manipulá-los com JavaScript, usa true / false
fonte
disabled
ereadonly
muito) mesmo se a recuperação de erro do navegador é muito bom. Se você deseja manipular o atributo com JS, ainda deve usarchecked
orremoveAttribute('checked')
. Achecked
propriedade levatrue
oufalse
.