2010-05-20 62 views
24

Suena como una pregunta tonta, pero me pregunto cuál es la mejor forma de indicar que se marca o no una casilla de verificación en HTML.¿Cuál es la sintaxis de los atributos booleanos, p. una casilla marcada, en HTML?

que he visto muchos ejemplos diferentes:

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

<input type="checkbox" checked="yes" /> 
<input type="checkbox" checked="no" /> 

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

Qué navegadores trabajan con cuáles de estos, y lo más importante, qué jQuery averiguar qué casilla está marcada en los 3?

Editar: La especificación W3C parece implicar que solo el attr marcado allí es correcto. ¿Eso significa que checked = "false" y checked = "no" seguirá marcando la casilla?

+0

Posible duplicado de [¿Cuál es el valor adecuado para un atributo comprobado de una casilla HTML?] (Http://stackoverflow.com/questions/7851868/whats-the-proper-value-for-a-checked-attribute- of-a-html-checkbox) –

Respuesta

31

En HTML:

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

para XHTML que tienen que utilizar el atributo/valor pares coincidentes:

<input type="checkbox" checked="checked" /> 
+2

'checked =" "' también es válido. Material de lectura adicional: http://www.whatwg.org/specs/web-apps/current-work/#boolean-attributes –

+0

, vale la pena leer esta respuesta aquí también: https://stackoverflow.com/a/24588369/5264501 –

7

HTML:

Cualquiera de ellos debe ser el más adecuado como dicen en W3C page. El atributo checked solo tiene que establecerse.

Como he escrito en Coronatus' comentario:

De hecho, no importa si se trata de marcado, marcado = 'lo que sea' o comprobado = 'marcado'. Está comprobando el valor booleano , por lo que es verdadero (conjunto) o falso (no configurado).

XHTML:

Tiene que especificar que, por lo checked="checked" es la única válida. La mayoría de los navegadores probablemente analizará correctamente los valores de HTML, pero de todos modos tendrá un error en su página.

1

La presencia de la propiedad "comprobada" especifica el estado. El valor es irrelevante/no es necesario.

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

es mi sugerencia

+3

El valor sí importa, solo se puede "verificar" (los navegadores solo tienen el error correcto para la basura. No dependa de la recuperación de errores, escriba código libre de errores).Si está escribiendo HTML (a diferencia de XHTML) puede (y debe) omitir el nombre (y los iguales y las comillas) dejando solo el valor. (Los atributos booleanos son raros.) – Quentin

+0

Como viste en el código de la publicación, no estoy diciendo que el valor no debería estar presente. Solo digo que podría escribir checked = "hello" o checked = "maybe" y obtener el resultado deseado. – kazanaki

+0

Pero sí, tienes razón en que debemos apuntar a XHTML y no solo a HTML. – kazanaki

5

De acuerdo con la HTML spec, la correcta uno es:

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

Utilizo esto y jQuery funciona perfectamente con ellos.

+0

De hecho, no importa si está marcado, marcado = "lo que sea" o marcado = "verificado". Está comprobando el valor booleano, por lo que es verdadero (conjunto) o falso (no establecido). –

2

Una prueba rápida revela que jQuery iguala cualquier valor establecido para ser verificado.

alert($('input:checked').length); 
// Returns 5 

Incluso una cadena vacía y los valores negativos.

1

Tendría cuidado al usarlo en Chrome, Firefox y Opera. Chorme parece tener un problema con las casillas de verificación que aparecen, Firefox distingue entre mayúsculas y minúsculas con los estilos y las etiquetas, y la ópera parece funcionar bien, pero tarda en actualizarse. Podría ser simplemente las versiones de los navegadores que se utilizan.

Aparte de eso, creo que debería funcionar <input type="checkbox" checked /> bien en todos ellos. La única diferencia realmente es cómo aparecen los navegadores individuales para mostrar el contenido de la página.

1

La especificación W3C parece implicar que solo el attr marcado allí es correcto. ¿Eso significa que checked = "false" y checked = "no" seguirá marcando la casilla?

Exactamente. Es por eso que es una mala idea usar checked="true" y checked="yes", implican que checked="false" y checked="no" no marcarán la casilla.

0

HTML5 spec:

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 insensible a mayúsculas y minúsculas ASCII para el nombre canónico del atributo, sin espacios en blanco iniciales o finales.

Conclusión:

Let boolean ser un atributo booleano de la etiqueta tag, como checked y <input type="checkbox".

Los siguientes son válida, equivalente y verdadera:

<tag boolean /> 
<tag boolean="" /> 
<tag boolean="boolean" /> 
<tag boolean="BoOlEaN" /> 

Los siguientes son inválida:

<tag boolean="0" /> 
<tag boolean="1" /> 
<tag boolean="false" /> 
<tag boolean="true" /> 

La ausencia del atributo es la única sintaxis válida para falsa :

<tag /> 

Recomendación

Si se preocupan por escrito XHTML, utilice boolean="boolean", ya <tag boolean> es XHTML válido (pero HTML válido) y otras alternativas son menos legible. De lo contrario, simplemente use <tag boolean> ya que es más corto.

+0

¿Alguna idea al respecto detrás de este diseño? Parece contrario a la intuición y no puedo pensar en ninguna ventaja sobre solo usar un valor booleano. Por ejemplo, estoy trabajando con un motor de representación (VisualForce/Salesforce) que no admite esta notación. – NSjonas

+0

@NSjonas ¡No! :-) tal vez porque es más corto para escribir? –

Cuestiones relacionadas