¿Qué valores para marcado y seleccionado son falsos?

Creo que de acuerdo con la especificación W3, se supone que debes hacer

 

Y

  selected="selected" 

Pero, la mayoría de los navegadores lo aceptarán, solo debes escribir “CHECKED” y no darle un valor. Entonces, ¿qué pasa si incluye el atributo? ¿Hay algún valor que se considere (consistentemente) falso?

No hay valores que causen que la checkbox esté desmarcada. Si el atributo checked existe, la checkbox se marcará independientemente del valor que establezca.

               

Los atributos checked y selected solo tienen dos valores, que son una copia del nombre del atributo y (de HTML 5 en adelante) una cadena vacía. Dar cualquier otro valor es un error.

Si no desea establecer el atributo, entonces se debe omitir todo el atributo.

Tenga en cuenta que en HTML 4 puede omitir todo excepto el valor. HTML 5 cambió esto para omitir todo excepto el nombre (lo que no hace ninguna diferencia práctica).

Por lo tanto, el conjunto completo (aparte de las variaciones en cAsE) de las representaciones válidas del atributo son:

         

Los documentos servidos como text / html (HTML o XHTML) se alimentarán a través de un analizador de sopa de tags, y la presencia de un atributo verificado (con cualquier valor) se tratará como “Este elemento debe verificarse”. Por lo tanto, si no es válido, checked="true" , checked="yes" , y checked="false" activarán el estado verificado.

No he tenido ninguna inclinación para descubrir qué mecanismos de recuperación de errores existen para el modo de análisis XML si se le da un valor diferente al atributo, pero esperaría que el legado de HTML y / o la simple recuperación de errores lo trataran en de la misma manera: si el atributo está ahí, entonces el elemento está marcado.

(Y todo lo anterior se aplica por igual a selected como lo hace a checked ).

Ningún valor se considera falso , solo la ausencia del atributo. Sin embargo, existen numerosos valores no válidos, y algunas implementaciones pueden considerar ciertos valores inválidos como falsos.

Especificación de HTML5

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

El atributo de contenido deshabilitado es un atributo booleano.

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

La presencia de un atributo booleano en un elemento representa el valor verdadero, y la ausencia del atributo representa el valor falso.

Si el atributo está presente, su valor debe ser la cadena vacía o un valor que es una coincidencia ASCII insensible a mayúsculas y minúsculas para el nombre canónico del atributo, sin espacios en blanco iniciales o finales.

Conclusión

Los siguientes son válidos, equivalentes y verdaderos :

     

Los siguientes son inválidos :

     

La ausencia del atributo es la única syntax válida para falso :

  

Recomendación

Si le importa escribir XHTML válido, use checked="checked" , ya que no es válido y otras alternativas son menos legibles. De lo contrario, simplemente use ya que es más corto.

En realidad, la especificación HTML 4.01 dice que estos atributos no requieren valores. No me he encontrado personalmente con una situación en la que el hecho de proporcionar un valor haya dejado estos controles como no seleccionados.

Aquí están los enlaces respectivos al documento de especificaciones para seleccionado y verificado .

Editar: Firebug hace que la checkbox esté marcada independientemente de cualquier valor que ponga entre comillas para el atributo comprobado (incluyendo solo escribir “marcado” sin ningún valor), y las herramientas de Developer Tool de IE 8 checked checked = “checked”. Sin embargo, no estoy seguro de que existan herramientas similares para otros navegadores que puedan alterar el estado representado de una checkbox.

La cadena vacía es falsa como regla.

Aparentemente, la cadena vacía no se respeta como vacía en todos los navegadores y la presencia del atributo comprobado se considera como marcada. Entonces todo el atributo debe estar presente u omitido.