C’è un modo per clonare i valori dei campi della forma in jQuery o javascript?

jQuery ha una funzione clone() che clona il modulo reale senza problemi, ma non conserva alcun valore che è stato inserito nel modulo.

C’è un modo per aggirare questo?

Il codice di esempio sarebbe molto apprezzato.

ha incontrato lo stesso problema, soluzione semplice:

 // touch all input values $('input:text').each(function() { $(this).attr('value', $(this).val()); }); var clones = $('input:text').clone(); 

il trucco è che questo cambierà l’attributo ‘valore’ effettivo nell’albero DOM, altrimenti i dati che inserisci ‘al volo’ esistono solo nello stato ‘DOM’

Derivando dalle note, ecco una soluzione. Con il seguente modulo:

 

Questo jQuery funziona, inclusi i textareas:

 $( 'input#clone' ).click( function() { $( 'form#old textarea' ).text( $( 'form#old textarea' ).val() ) $("form#old").clone().attr( 'id', 'new_form' ).appendTo("body") } ) 

Demo: http://jsfiddle.net/Jux3e/

Un’altra semplice soluzione per i valori della textarea che non vengono clonati consiste nell’includere il seguente codice JavaScript nel codice HTML: https://github.com/spencertipping/jquery.fix.clone

Semplicemente aggiusta il metodo clone in modo da poter includere il file e poi dimenticare che è lì. Apparentemente c’è un problema con la clonazione dei valori di selezione e anche questo stesso file risolve il problema.

Questo file è stato collegato a: http://bugs.jquery.com/ticket/3016 . Il bug ha 4 anni.

Puoi usare questo plugin jQuery.

 /** * clone element, including the textarea part */ $.fn.clone2 = function(val1, val2) { // ret for return value, cur for current jquery object var ret, cur; ret = $(this).clone(val1, val2); cur = $(this); // copy all value of textarea ret.find('textarea').each(function() { var value_baru; // use name attribute as unique id value_baru = sek.find('[name="$name"]'.replace('$name', $(this).attr('name'))) .val(); // set the new value to the textarea $(this).val(value_baru); }); // return val return ret; } 

se hai bisogno di duplicare il campo stesso, controlla questa nuova funzione relCopy

Trovato questo problema e ha scritto questo wrapper:

 $.fn.cloneField = function(withDataAndEvents) { var clones = []; this.each(function(){ var cln = $(this).clone(withDataAndEvents); cln.val($(this).val()); clones.push(cln.get(0)); }); return jQuery( clones ); }; 

Usa questo codice per copiare i valori della textarea

 clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val());