2011-03-16 13 views
14

Suponga que tiene elemento de entrada:Javascript y el uso de elementos de entrada defaultValue ocultos

<input id="aaa" type="text" value="unchanged" /> 

a continuación, iniciar la escritura JS:

var e = document.getElementById("aaa"); 
e.value = "changed"; 
alert(e.defaultValue + "/" + e.value); 

resultado será "sin cambios/cambiado". Por desgracia, cuando el elemento de entrada es hidden:

<input id="aaa" type="hidden" value="unchanged" /> 

... el mismo script js parecen no estar trabajando más. El resultado es "cambiado/cambiado". ¿Es esta una manera correcta? Si es así, ¿por qué solo los elementos ocultos del formulario actúan de manera diferente?

+0

¿Con qué navegador estás trabajando? –

+0

Firefox 3.6.15. – waste

+0

de mi prueba, la respuesta @Pointy resume la situación correctamente –

Respuesta

11

La propiedad "defaultValue" solo se mantiene de una manera que aparentemente espera para los campos "text", "file" y "password".

Here es la parte relevante de la especificación DOM.

Sospecho que la razón de esto es que la actividad del usuario por sí sola no puede cambiar el valor de los elementos ocultos. Si desea conservar los valores iniciales, ejecute algo en "cargar" o "listo" para esconder el valor en alguna parte.

+1

Pude resolverlo cambiándolo a 'type =" input "style =" display: none "' y eso funciona para mí. Solo tenía curiosidad acerca de la especificación y la razón. ¡Gracias por responder! – waste

+0

no solo eso, parece que no hay tipos nuevos, por ejemplo, type = 'number', type = 'time', etc, keep 'defaultValue'! para mí, esto significa mantener mi propio atributo para hacer lo que estaba usando 'defaultValue' para hacer. oh bien –

3

Para los elementos de entrada ocultos, defaultValue no está realmente implementado. La razón por la que obtienes el mismo resultado ast .value es porque el navegador que usas está fallando.

Consulte here para una discusión de esto con Firefox.

+0

Gracias, lo comprobaré. – waste

Cuestiones relacionadas