2012-05-18 20 views
30

¿Cuál es la diferencia entre los siguientes dos usos?checked = "checked" vs checked = true

document.getElementById('myRadio').checked = "checked"; 

y

document.getElementById('myRadio').checked = true; 

Para mí, ambos se comportan de la misma manera. Pero, solo tengo curiosidad por saber por qué existen dos métodos para hacer lo mismo.

¿Cuál será el uso ideal? Necesito soportar IE7 y versiones superiores.

Respuesta

40

document.getElementById('myRadio').checked es un valor booleano. Debe ser true o false

document.getElementById('myRadio').checked = "checked"; coloca la cadena en un valor booleano, que es verdadero.

document.getElementById('myRadio').checked = true; acaba de asignar true sin fundición.

Use true, ya que es marginalmente más eficiente y es más reveladora intención a los mantenedores.

7

El atributo original checked (HTML 4 y anteriores) no requería ningún valor en él, si existía, el elemento se "comprobó", si no, no lo era.

Esto, sin embargo, no es válida para XHTML que siguió HTML 4.

La norma propone utilizar checked="checked" como condición para la verdad - por lo que en ambos sentidos en los que posteaste terminan haciendo lo mismo.

Realmente no importa cuál use, use el que tenga más sentido para usted y cumpla con él (o acuerde con su equipo qué camino tomar).

+5

No. En HTML 4 y anteriores que * no * requiere un valor ... que era el nombre que era opcional. es decir 'checked =" checked "' es la versión completa, pero puede dejar 'checked =" 'y' "' off y simplemente dejar el valor atrás. (SGML puede obtener * raro *!) – Quentin

+3

Dicho esto, la pregunta es sobre la propiedad DOM, no las reglas HTML. – Quentin

+0

@Quentin - Muy bien, aunque eso es casi una discusión sobre semántica. – Oded

2

checked atributo es un valor booleano de modo "checked" valor de otra "string" excepto boolean false convierte a true.

Cualquier valor de cadena será verdadero. También la presencia de un atributo que sea cierto:

<input type="checkbox" checked> 

Puede que sea única uncheked hacer el cambio booleano en DOM utilizando JS.

Así que la respuesta es: son iguales.

w3c

+2

Está confundiendo la propiedad DOM de JavaScript con el atributo HTML (y confunde en la recuperación de errores del navegador para una buena medida). – Quentin

6

document.getElementById('myRadio') le devuelve el elemento DOM, lo haré referencia como elem en esta respuesta.

elem.checked accede a la propiedad llamado checked del elemento DOM. Esta propiedad es siempre un booleano.

Al escribir HTML, usa checked="checked" en XHTML; en HTML, simplemente puede usar checked. Al configurar el atributo (esto se hace a través de .setAttribute('checked', 'checked')), debe proporcionar un valor, ya que algunos navegadores consideran que un valor vacío es inexistente.

Sin embargo, como tiene el elemento DOM no tiene ninguna razón para establecer el atributo, ya que puede usar la propiedad booleana, que es mucho más cómoda. Como las cadenas no vacías se consideran true en un contexto booleano, la configuración de elem.checked a 'checked' o cualquier otra cosa que no sea un valor falso (incluso 'false' o '0') marcará la casilla de verificación. No hay razón para no usar true y false, por lo que debe mantener los valores correctos.

5

El elemento tiene un atributo y una propiedad denominada checked. La propiedad determina el estado actual.

El atributo es una cadena y la propiedad es un booleano. Cuando el elemento se crea a partir del código HTML, el atributo se establece a partir del marcado y la propiedad se establece según el valor del atributo.

Si no hay ningún valor para el atributo en el marcado, el atributo se convierte en null, pero la propiedad es siempre bien true o false, por lo que se convierte en false.

Cuando se establece la propiedad, se debe utilizar un valor booleano:

document.getElementById('myRadio').checked = true; 

Si se establece el atributo, se utiliza una cadena:

document.getElementById('myRadio').setAttribute('checked', 'checked'); 

Tenga en cuenta que establecer el atributo cambia también el propiedad, pero establecer la propiedad no cambia el atributo.

Tenga en cuenta también que independientemente del valor que establezca el atributo, la propiedad se convierte en true. Incluso si usa una cadena vacía o null, configurar el atributo significa que está marcado. Utilice removeAttribute para desactivar el elemento con el atributo:

document.getElementById('myRadio').removeAttribute('checked'); 
+0

Buena explicación entre la propiedad y el atributo. ¡Gracias! – Mac

Cuestiones relacionadas