2011-01-05 11 views
12

Sto provando a clonare un feildset quindi inviare il contenuto degli input e selezionare utilizzando serialize. Funziona correttamente ma la selezione non mantiene il suo valore. Ho provato diversi metodi che ho trovato, ma niente sembra funzionare. Ecco come sto clonando e impostando i dati correnti.jquery clone select non mantiene il valore

Come è possibile mantenere il valore della selezione durante la clonazione?

$('body').append('<form id="form-to-submit" style="visibility:hidden;"></form>'); 
var fieldsetName = $this.parents('.fieldsetwrapper'); 
$('#form-to-submit').html($(fieldsetName).clone()); 
var data = $('#form-to-submit').serialize(); 
+1

Invece di clonare l'intero fieldset, w non solo serializzare i dati dal fieldset come un oggetto JS quando lo desideri, e usare quell'oggetto per ripristinarlo in un secondo momento (se è quello che cerchi). O ho frainteso la ragione per cui stai clonando? – Phrogz

+1

Non è una buona idea usare '.html()' con '.clone()'. Clone fornisce elementi, mentre '.html()' si aspetta una stringa. Usa direttamente gli elementi: '$ ('# form-to-submit'). Empty(). Append ($ (fieldsetName) .clone());' –

+0

stesso problema è nella libreria di prototipi – WonderLand

risposta

22

L'elemento option mantiene il suo attuale selectedness con la selected javascript di proprietà (per non essere confuso con l'attributo selected, che corrisponde a defaultness selectedness).

Dal jQuery clone non clonare il selectedness corrente (http://bugs.jquery.com/ticket/1294), dovrete farlo manualmente:

$('#form-to-submit').html($(fieldsetName).clone()); 
$('#form-to-submit select').val($('.fieldsetwrapper select').val()); 
+0

Ciao, questo è davvero interessante soluzione, non sapevo che jQuery potesse trovare da solo dove collocare i valori selezionati. Esiste un modo per utilizzare questo modulo per un intero modulo e non solo per selezionare gli elementi? Conosci un collegamento che parla di questo? Grazie – FLX

+1

Ho trovato che questa soluzione non ha funzionato per più menu di selezione se avevano genitori diretti diversi. Invece ho dovuto eseguire il loop su "ciascuno" dei selettivi e abbinarlo alla selezione corrispondente nell'originale con il metodo ".eq". Solo una breve nota per chiunque sfoglia! :) –

+0

@Casey, volevo che avessi elaborato con un pezzo di codice :) Dovresti ancora ottenere l'indice della selezione originale, giusto? O c'è un'altra funzione magica che fa questo? :-) – Peter

3

Si dovrebbe essere in grado di impostare il valore della nuova select elemento al valore di quello vecchio:

$('#form-to-submit select').val($('.fieldsetwrapper select').val()); 
0

Nel mio caso ho usato

$('<form></form>').html($('.myDiv').clone()) 

e fissato il problema aggiungendo un altro modulo al markup

$('.myForm').serialize() 
Problemi correlati