2009-12-04 4 views
9

Aquí es mi HTML:¿Debería el parámetro `checkbox.checked = false` no borrar el atributo HTML también?

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

He aquí un extracto de Firebug:

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

>>> test.checked = false 
false 

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

Um ... ¿Me estoy perdiendo algo, o que deberían última línea no lea la siguiente?

<input id="test" type="checkbox"> 

IU-sabia, la casilla de verificación en efecto, desmarque cuando ejecuto la línea checked = false.

De todos modos, si hay una explicación legítima para esto, entonces ¿cuál es la forma correcta de desmarcar una casilla de verificación de JavaScript, si no es checked = false?

+2

Probablemente no le importe lo que dice Firebug mientras los datos lleguen a su servidor y la interfaz de usuario se comporte como se esperaba. –

+0

Esto es solo para demostrar de lo que estoy hablando. El verdadero problema es que tengo CSS que quiero que tenga un efecto en función de si la casilla de verificación está marcada o no, y solo hace su trabajo cuando hago clic en la casilla de verificación, no cuando configuro '.checked'. – Kev

Respuesta

23

El atributo value de input type="text" y los checked o selected atributos de input type="checkbox", radio y option corresponde con el valor inicial del campo de formulario, no el valor actual del usuario o de la escritura se ha puesto. En consecuencia, al cambiar la propiedad checked no se altera el valor del atributo, y la configuración del atributo checked no altera el valor real visible que se va a enviar con el formulario.

El atributo checked="checked" corresponde a defaultCheckedDOM property, no a la propiedad checked. Del mismo modo, el atributo value="..." corresponde a defaultValue.

(Tenga en cuenta que hay IE trampas aquí debido a IE no saber la diferencia entre una propiedad y un atributo.)

+0

Nunca mencioné el atributo 'valor'. Mi casilla de verificación de prueba ni siquiera tiene una. Así que no estoy seguro de cómo se aplica el primer párrafo, pero la propiedad defaultChecked fue la clave. ¡Gracias! – Kev

+0

Editado, gracias de nuevo. – Kev

+0

Su fondo: checked/defaultChecked es el caso especial de value/defaultValue para casillas de verificación (seleccionadas de forma similar/predeterminadasSe seleccionó para opciones). – bobince

-3

checked = '', es correcto, creo. Sospecho que el navegador intenta ser amistoso cuando haces checked = false y haces la acción equivalente, checked = ''.

+2

Lo intenté. No parece cambiar el resultado. También de acuerdo con https://developer.mozilla.org/en/XUL/checkbox, la propiedad marcada es de tipo booleano. – Kev

+0

Quizás estoy confundido. ¿Hay algo que no funciona como esperabas? –

+0

Lo siento, había tratado de expresar eso en la pregunta. Espero que la propiedad '.checked' tenga un efecto en el atributo HTML (especialmente porque tiene un efecto en la UI). Pero el atributo HTML no cambia, sin importar en qué se haya configurado inicialmente. Esto parece bastante inconsistente. – Kev

-2

Usted puede estar esperando Firebug para mostrar la información de valor de manera similar a la forma en style se actualiza en el HTML panel de inspección. Sin embargo, input, select, option y textarea no se comportan de la misma manera y los valores no se actualizarán en este panel y siempre mostrarán los valores originales (aquellos en el tiempo de renderizado de la página). Si la interfaz de usuario se está actualizando, entonces sabrá que lo está haciendo bien.

+0

Esto simplemente no es verdad. Pruébelo usted mismo con un elemento HTML 'a' sin atributo de valor: ejecute nuevamente las líneas' a', 'a.value = 7' y' a'. – Kev

+0

Lo siento, lo que dije sigue en pie, pero debería aclarar que 'a' era una variable de JavaScript que apuntaba a un elemento HTML de entrada. Probablemente apareció como si me refiero a una etiqueta de anclaje. – Kev

+0

Apareció de esa manera, pero eliminé ese comentario porque ya no es necesario. Sin embargo, no entiendo el escenario que estás tratando de describir en tu primer comentario, particularmente con "y' a' otra vez " –

Cuestiones relacionadas