Todos sabemos cómo formar una entrada de casilla de verificación en HTML:
<input name="checkbox_name" id="checkbox_id" type="checkbox">
Lo que no sé: ¿cuál es el valor técnicamente correcto para una casilla marcada? He visto todo esto funcionar:
<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">
¿Es la respuesta que no importa? No veo evidencia de la respuesta marcada como correcta aquí desde la especificación en sí:
Las casillas de verificación (y los botones de opción) son interruptores de encendido / apagado que el usuario puede activar o desactivar. Un interruptor está "activado" cuando se establece el atributo marcado del elemento de control. Cuando se envía un formulario, solo los controles de casilla de verificación "en" pueden tener éxito. Varias casillas de verificación en un formulario pueden compartir el mismo nombre de control. Así, por ejemplo, las casillas de verificación permiten a los usuarios seleccionar varios valores para la misma propiedad. El elemento INPUT se usa para crear un control de casilla de verificación.
¿Cuál diría un escritor de especificaciones la respuesta correcta? Proporcione respuestas basadas en evidencia.
fuente
Respuestas:
Hablando estrictamente, debe poner algo que tenga sentido; de acuerdo con las especificaciones aquí , la versión más correcta es:
Para HTML, también se puede utilizar la sintaxis de atributo vacío ,
checked=""
o incluso simplementechecked
(para XHTML estricto, esto es no es compatible ).Efectivamente, sin embargo, la mayoría de los navegadores admitirán casi cualquier valor entre las comillas. Se verificará todo lo siguiente:
Y solo se desmarcará lo siguiente:
Ver también esta pregunta similar en
disabled="disabled"
.fuente
checked (checked)
que significa "El atributo marcado puede tener el valor 'verificado'). Solochecked
es un valor aceptable, ninguno de los otros lo es. Los atributos booleanos le permiten omitir todo excepto el valor, por lo quechecked
es aceptable así comochecked="checked"
.checked
,checked=""
ychecked="checked"
están bien. w3.org/TR/html-markup/input.checkbox.html"checked"
, sin el nombre del atributo, y hacer que funcione correctamente.checked
, use autocomplete = "off" para evitar que su navegador la verifique automáticamente.Especificación HTML5 :
http://www.w3.org/TR/html5/forms.html#attr-input-checked :
http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :
conclusión :
Los siguientes son válidos, equivalentes y verdaderos :
Los siguientes no son válidos :
La ausencia del atributo es la única sintaxis válida para falso :
Recomendación
Si le interesa escribir XHTML válido, use
checked="checked"
, ya que<input checked>
es XHTML no válido (pero HTML válido) y otras alternativas son menos legibles. De lo contrario, solo utilícelo<input checked>
ya que es más corto.fuente
Esos son igualmente válidos. Y en JavaScript:
fuente
input.setAttribute("checked")
TypeError: Error al ejecutar 'setAttribute' en 'Elemento': se requieren 2 argumentos, pero solo 1 presentequieres esto, creo:
checked='checked'
fuente
marcada = "marcada"
son equivalentes
de acuerdo con la casilla de verificación de especificaciones '---- ⓘ Checked = "Checked" o "" (cadena vacía) o vacío Especifica que el elemento representa un control seleccionado .---'
fuente
Es una ciudad bastante loca que la única forma de hacer que se marque falso es omitiendo cualquier valor. Con Angular 1.x, puede hacer esto:
lo cual es mucho más sensato, si necesita que esté sin marcar.
fuente
Creo que esto puede ayudar:
Primero lea todas las especificaciones de Microsoft y W3.org.
Vería que la configuración del elemento real de una casilla de verificación debe realizarse en la PROPIEDAD DEL ELEMENTO, no en la interfaz de usuario o el atributo.
$('mycheckbox')[0].checked
En segundo lugar, debe tener en cuenta que el atributo marcado DEVUELVE una cadena "verdadero", "falso"
¿Por qué es importante? Porque necesitas usar el tipo correcto. Una cadena, no un booleano. Esto también es importante al analizar su casilla de verificación.
$('mycheckbox')[0].checked = "true"
if($('mycheckbox')[0].checked === "true"){ //do something }
También debe darse cuenta de que el ATRIBUTO "marcado" es para establecer el valor de la casilla de verificación inicialmente. Esto no hace mucho una vez que el elemento se representa en el DOM. Imagine que esto funciona cuando se carga la página web y se analiza inicialmente.
Iré con la preferencia de IE en este caso:
<input type="checkbox" checked="checked"/>
Por último, el aspecto principal de confusión para una casilla de verificación es que el elemento UI de la casilla de verificación no es el mismo que el valor de propiedad del elemento. No se correlacionan directamente. Si trabaja en .net, descubrirá que el usuario que "marca" una casilla de verificación nunca refleja el valor real de bool pasado al controlador. Para configurar la interfaz de usuario, utilizo ambos
$('mycheckbox').val(true);
y$('mycheckbox').attr('checked', 'checked');
En resumen, para una casilla de verificación marcada necesita:
DOM inicial:
<input type="checkbox" checked="checked">
Propiedad del elemento:
$('mycheckbox')[0].checked = "true";
UI:
$('mycheckbox').val(true);
y$('mycheckbox').attr('checked', 'checked');
fuente
Bueno, para usarlo, no creo que sea importante (similar a deshabilitado y de solo lectura), personalmente utilizo chequeado = "verificado", pero si está tratando de manipularlos con JavaScript, usa verdadero / falso
fuente
disabled
yreadonly
también) incluso si la recuperación de errores del navegador es bastante buena. Si desea manipular el atributo con JS, entonces aún debe usarchecked
oremoveAttribute('checked')
. Lachecked
propiedad tomatrue
ofalse
.