2011-01-05 29 views
12

Estoy tratando de clonar un feildset, luego presento el contenido de las entradas y lo selecciono usando serialize. Está funcionando correctamente, sin embargo, select no mantiene su valor. He intentado varios métodos que he encontrado pero nada parece funcionar. Así es como estoy clonando y configurando los datos actuales.jquery clone select no mantiene el valor

¿Cómo puedo mantener el valor de select when cloning?

$('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

En lugar de clonar todo el conjunto de campos, w No solo serialice los datos del fieldset como un objeto JS cuando lo desee, y use ese objeto para restaurarlo más tarde (si eso es lo que busca). ¿O he entendido mal la razón por la que estás clonando? – Phrogz

+1

No es una buena idea usar '.html()' con '.clone()'. Clone da elementos, mientras que '.html()' espera una cadena. Usa los elementos directamente: '$ ('# form-to-submit'). Empty(). Append ($ (fieldsetName) .clone());' –

+0

mismo problema está en la biblioteca de prototipos – WonderLand

Respuesta

22

El elemento option mantiene su selectedness actual con el selected Javascript propiedad (no a confundirse con el atributo selected, que corresponde a selección predeterminada).

Desde jQuery clone no clona el selectedness actual (http://bugs.jquery.com/ticket/1294), tendrá que hacerlo manualmente:

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

Hola, esto es realmente interesante solución, no sabía que jQuery podría encontrar solo dónde colocar los valores seleccionados. ¿Hay alguna forma de utilizar este formulario como un formulario completo y no solo seleccionar elementos? ¿Conoces un enlace que hable de esto? Gracias – FLX

+1

Encontré que esta solución no funcionaba para múltiples menús de selección si tenían diferentes padres directos. En cambio, tuve que recorrer "cada" de las selecciones y unirlas con la selección correspondiente en el original con el método ".eq". ¡Solo una nota rápida para cualquiera que la lea! :) –

+0

@Casey, me gustaría haber elaborado con un fragmento de código :) Todavía tendría que obtener el índice de la selección original ¿verdad? ¿O hay otra función mágica que hace esto? :-) – Peter

3

Usted debe ser capaz de establecer el valor del nuevo elemento select al valor de la anterior:

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

En mi caso yo estaba usando

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

y arreglado el problema al agregar otro formulario a la marca

$('.myForm').serialize() 
Cuestiones relacionadas