2012-05-18 9 views
7

Continua adoptar el código para trabajar con IE jQuery ...valor de ajuste de entrada oculto que no funciona como se esperaba en IE7 e IE8

Tengo una div ocultos que contiene un formulario para editar alguna información. Cuando el usuario selecciona el elemento para editar, se muestra este div y los campos se rellenan con la información del artículo. Que divs (en términos simplificados) se ve 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> 

que usar jQuery para establecer los valores en los campos. Mi función para la apertura de la edición div ve algo como 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 y el IE 9, sin embargo en IE7 e IE8, estoy teniendo un problema extraño. Puedo ver que el item_id se ha configurado correctamente en la función edit_item, 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 somete a ajax, la alerta muestra que el valor es una cadena vacía a pesar de haberse establecido correctamente. Curiosamente, todos los demás campos están bien. Y funciona correctamente en IE 9.

¿Qué me falta aquí? Muchas gracias de antemano.

+1

identificadores están obligados a ser único en la especificación HTML. Tienes múltiplos de "# campo1". Además, los ID no pueden comenzar con una marca de almohadilla. Ver: http://stackoverflow.com/questions/448981/what-characters-are-valid-in-css-class-names –

+0

Gracias por el comentario, sin embargo, este no es el problema. En mi código real, ambos son válidos: identificaciones únicas y sin signo hash: errores tipográficos cuando se crea un código simplificado para la pregunta. –

+0

¿tal vez la función edit_item se activó una vez más con el parámetro item_id incorrecto? has intentado agregar alerta (item_id); línea a la función edit_item? – Serhiy

Respuesta

22

Esto es totalmente estúpido, y no debería ser el caso, sin embargo:

$('#field1').val(item.property1); 

no funcionó. Sin embargo,

$('#field1').attr("value", item.property1); 

funcionó bien. Lo dejo así.

+8

¡Algunos navegadores se enorgullecen de hacer que la vida de los diseñadores/desarrolladores sea horrible ...! ! – Misam

+0

@Misam háblame al respecto :) –

+0

Ninguno de los anteriores funciona para mí en IE 8,9,10 :( – NullPointer

1

solución para IE sin jQuery en JavaScript puro no parece demasiado complicado:

document.getElementById(id).setAttribute('value', value); 
+0

Guau, ¿por qué funcionó esto y no la sintaxis regular de el.value = value? –

1

Además de la respuesta de Aleks G, descubrí que value atributo no debe ser definida de manera implícita en el elemento oculto en Para jQuery .setAttr() y .val(), trabaje sin problemas en IE8.

ver aquí para más detalles: jQuery .val() setter not working?

Cuestiones relacionadas