2012-05-18 14 views
7

Continuando adottando il mio codice per lavorare con IE jquery ...valore di impostazione input nascosto che non funziona come previsto in IE7 e IE8

Ho un nascosti div contenente un form per modificare alcune informazioni. Quando l'utente seleziona l'elemento da modificare, viene mostrato questo div e i campi vengono popolati con le informazioni per l'articolo. Che div (in termini semplificati) si presenta così:

<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> 

ho utilizzare jQuery per impostare i valori nei campi. La mia funzione per l'apertura del div di modifica simile a questa:

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(); 
    }); 
} 

Tutto questo funziona bene in FF, Opera, Webkit e IE 9, ma in IE7 e IE8, sto avendo un problema strano. Riesco a vedere impostato correttamente nella funzione edit_item, tuttavia non appena tale funzione viene completata, il valore di input nascosto (qid) viene reimpostato sulla stringa vuota. Quando il modulo è inviato ajax, l'avviso mostra che il valore è una stringa vuota nonostante sia stata impostata correttamente. È interessante notare che tutti gli altri campi vanno bene. E funziona correttamente in IE 9.

Cosa mi manca qui? Molte grazie in anticipo.

+1

ID sono tenuti ad essere unico nelle specifiche HTML. Hai multipli di "# field1". Inoltre, gli ID non possono iniziare con un segno cancelletto. Vedi: http://stackoverflow.com/questions/448981/what-characters-are-valid-in-css-class-names –

+0

Grazie per il commento, tuttavia questo non è il problema. Nel mio codice reale entrambi sono validi: ID univoco e nessun segno di hash: errori di battitura durante la creazione di codice semplificato per la domanda. –

+0

forse la funzione edit_item è stata attivata ancora una volta con il parametro item_id errato? hai provato ad aggiungere un avviso (item_id); riga per la funzione edit_item? – Serhiy

risposta

22

questo è del tutto stupido, e non dovrebbe essere il caso, tuttavia:

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

non ha funzionato. Eppure

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

funzionava bene. Lo sto lasciando.

+8

Alcuni browser di tempo rendono orgogliosi i progettisti/sviluppatori della vita orribile .. !! ! – Misam

+0

@Misam parlamene :) –

+0

Nessuno dei precedenti funziona per me in IE 8,9,10 :( – NullPointer

1

soluzione per IE senza JQuery in puro JavaScript non sembra troppo complicato:

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

Wow, perché funziona e non la normale sintassi el.value = value? –

1

Oltre alla risposta di Aleks G, ho scoperto che value attributo non deve essere definito implicitamente nel elemento nascosto in per ordinare jQuery .setAttr() e .val() lavorare senza problemi in IE8.

Vedi qui per maggiori dettagli: jQuery .val() setter not working?

Problemi correlati