La configuración de jquery con valor de entrada oculto no funciona como se esperaba en IE7 e IE8
-
11-12-2019 - |
Pregunta
Continuando adoptando mi código para trabajar con IE...
tengo un escondido div
que contiene un formulario para editar cierta información.Cuando el usuario selecciona el elemento para editar, se muestra este div y los campos se completan con la información del elemento.Esos divs (en términos simplificados) se ven así:
<div id="editform">
<form action="" method="post" id="qform" name="qform">
First param: <input name="field1" id="field1"/> <br/>
Second param: <input name="field2" id="field2"/> <br/>
...
<input type="hidden" name="qid" id="qid" value=""/>
<img id="submit" src="..." alt="..." title="..." />
</form>
Utilizo jquery para establecer los valores en los campos.Mi función para abrir el div de edición se parece a esto:
function edit_item(item_id) {
item = get_item(item_id); //this will return a JS object
$('#field1').val(item.property1);
$('#field2').val(item.property2);
...
$('#qid').val(item_id);
$('#submit').click(function() {
alert($('#qid').val());
$('#qform').ajaxSubmit();
});
}
Todo esto funciona bien en FF, Opera, Webkit e IE 9, sin embargo, en IE7 e IE8 tengo un problema extraño.puedo ver el item_id
está configurado correctamente en el edit_item
función, sin embargo, tan pronto como se completa esa función, el valor de entrada oculto (qid
) se restablece a la cadena vacía.Cuando el formulario se envía mediante ajax, la alerta muestra que el valor es una cadena vacía a pesar de que está configurado correctamente.Curiosamente, todos los demás campos están bien.Y funciona correctamente en IE 9.
¿Que me estoy perdiendo aqui?Muchas gracias de antemano.
Solución
Esto es totalmente estúpido y, sin embargo, no debería ser así:
$('#field1').val(item.property1);
no funcionó.Todavía
$('#field1').attr("value", item.property1);
funcionó bien.Lo dejo así.
Otros consejos
La solución para IE sin JQuery en JavaScript puro no parece demasiado complicada:
document.getElementById(id).setAttribute('value', value);
Además de la respuesta de Aleks G, descubrí que value
atributo no debe definirse implícitamente en el elemento oculto para jQuery .setAttr()
y .val()
Funciona sin problemas en IE8.
Consulte aquí para obtener más detalles:¿El configurador jQuery .val() no funciona?