Pregunta

Tengo algo como esto en mi formularios web:

<input type="hidden" name="myField" value="defaultValue" />

Más tarde, en algo de JavaScript, estoy sobrescribiendo el valor predeterminado antes de enviarla a la página al servidor.

var formField = document.getElementsByName("myField")[0];
formField.setAttribute("value", "myNewValue");
var form = document.getElementById("myForm"); 
form.submit();

Todos los navegadores (He probado este código durante años en IE5-IE8, Firefox, Opera, Chrome, Safari, ...) están enviando "myNewValue" al servidor. Excepto IE9: envía "defaultValue". ¿Que está pasando aqui? ¿Me estoy perdiendo de algo?

Si quito el atributo "valor" del campo, sino que también trabaja en IE9. También funciona en IE9 si me cambio a modo de representación IE8.

Es esto un error o es compatible con IE9 más normas que los otros navegadores?

¿Fue útil?

Solución

David Dorward parece ser correcto en lo que respecta a HTML 4, pero esto parece ser propiedades de fractura compatibilidad hacia atrás, por lo que se puede esperar de HTML5 para describir lo que los navegadores de hecho lo hacen. Y parece. Se dice esto: (el subrayado es mío)

El atributo valor de contenido da la valor por defecto del elemento de entrada. Cuando el atributo de valor de contenido es añadido, establecer o eliminado, si el bandera sucia valor de control es falsa, el agente de usuario debe establecer el valor de el elemento con el valor del valor atributo de contenido , si lo hay, o la cadena vacía de otra forma, y ??luego ejecutar la desinfección valor actual algoritmo, si uno está definido.

http: //dev.w3 .org / html5 / spec / la-input-element.html # attr-input-valor

Su escenario no describe nada que pudiera establecer el indicador de valor sucia antes de la llamada setAttribute, por lo que creo que la llamada setAttribute debe establecer la propiedad y el valor el navegador debe enviar myNewValue no defaultValue.

Así que sí, creo que es un error IE9 Beta.

Otros consejos

El atributo de valor se define como el establecimiento de la valor inicial .

Una vez que la forma ha sido cargado, el campo tendrá su conjunto valor real a su valor inicial.

Por lo que yo sé, no hay nada que diga que el valor actual debe cambiar si cambia el valor inicial después de que el formulario ha cargado, así que sospecho que se trata de una corrección de errores y no un nuevo error.

Utilice la propiedad de valor en lugar del método setAttribute.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top