2010-07-14 15 views
22

jQuery ha una funzione clone() che clona il modulo effettivo senza problemi, ma non conserva alcun valore che è stato inserito nel modulo.Esiste un modo per clonare i valori dei campi modulo in jQuery o javascript?

C'è un modo per aggirare questo?

Il codice di esempio sarebbe molto apprezzato.

+0

si può dare un po 'più contesto? Un test rapido non ha problemi qui: http://jsfiddle.net/meGyg/ –

+0

Penso che il problema è se si modificano i dati tramite il modulo e quindi si tenta di clonarlo. Batti il ​​tuo violino: http://jsfiddle.net/F9aWu/ Prova a cambiare il modulo, quindi fai clic su clone. – hookedonwinter

+0

ya La soluzione di [nick craver] funziona bene tranne la parte textarea – hookedonwinter

risposta

7

In base alle note, ecco una soluzione. Con il seguente modulo:

<form id="old"> 
    <textarea>Some Value</textarea> 
    <input type="text" value="Some Value" /> 
    <input type="checkbox" value="bob" checked /> 
    <br /> 
</form> 

<input type="button" value="Clone" id="clone" /> 

Questo jQuery opere, tra le textarea:

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

0

è possibile utilizzare 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; 
} 
24

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 reale 'valore' nella struttura DOM, altrimenti i dati inseriti 'on-the -fly' esiste solo nel DOM 'stato'

+0

Questo non ha bisogno di essere sfuggito? –

+1

@ChrisStryczynski Non penso, l'input di testo non può visualizzare HTML, lo stai impostando sul valore che aveva già prima e le virgolette non sono un problema perché stai impostando un valore di attributo di stringa invece di stampare codice HTML semplice codice. – sled

+0

questo è efficace per l'input: testo, ma che dire di checkbox, pulsanti di opzione, aree di testo e simili? –

0

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

se avete bisogno di duplicare il campo stesso, controllare questa funzione metallico relCopy

3

Un'altra soluzione semplice per i valori textarea non essere clonati è quello di includere il seguente file JavaScript nel codice HTML: https://github.com/spencertipping/jquery.fix.clone

E 'solo le patch 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 da: http://bugs.jquery.com/ticket/3016. Il bug ha 4 anni.

0

Usa questo codice per copiare textarea valori

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