2010-07-14 9 views
22

jQuery a une fonction clone() qui clone le formulaire actuel sans problème, mais ne conserve aucune des valeurs qui ont été entrées dans le formulaire.Existe-t-il un moyen de cloner des valeurs de champs de formulaire dans jQuery ou javascript?

Existe-t-il un moyen de contourner ce problème?

Un exemple de code serait très apprécié.

+0

Pouvez-vous donner un peu plus de contexte? Un test rapide n'a pas de problèmes ici: http://jsfiddle.net/meGyg/ –

+0

Je pense que le problème est que si vous modifiez les données via le formulaire, puis essayez de le cloner. Forked votre violon: http://jsfiddle.net/F9aWu/ Essayez de changer le formulaire, puis cliquez sur cloner. – hookedonwinter

+0

La solution de ya @ [nick craver] fonctionne correctement sauf pour la partie textarea – hookedonwinter

Répondre

7

À partir des notes, voici une solution. Avec la forme suivante:

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

Cette jQuery fonctionne, y compris les zones de texte:

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

    } 
) 

Démo: http://jsfiddle.net/Jux3e/

0

Vous pouvez utiliser ce 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

couru dans le même problème, solution simple:

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

var clones = $('input:text').clone(); 

l'astuce est que cela va changer l'attribut « valeur » réelle dans l'arborescence DOM, sinon les données que vous entrez « sur le -Fly » existe que dans les DOM 'État'

+0

N'était-ce pas nécessaire d'être échappé? –

+1

@ChrisStryczynski Je ne pense pas, la saisie de texte ne peut pas afficher HTML, vous le définissez à la valeur qu'il avait déjà, et les citations ne sont pas un problème parce que vous définissez une valeur d'attribut chaîne au lieu d'imprimer HTML code. – sled

+0

cela est efficace pour l'entrée: texte, mais qu'en est-il des cases à cocher, boutons radio, zones de texte et similaires? –

0

trouvé ce problème et a écrit cette enveloppe:

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

si vous avez besoin de dupliquer le champ lui-même, vérifier cette fonction grêles relCopy

3

Une autre solution facile pour les valeurs textarea pas clonés est d'inclure le fichier JavaScript suivant dans votre code HTML: https://github.com/spencertipping/jquery.fix.clone

Il patches juste la méthode clone Vous pouvez donc inclure le fichier et oublier que c'est là. Apparemment, il y a aussi un problème de clonage des valeurs de sélection et ce même fichier résout également ce problème. Ce fichier a été lié à: http://bugs.jquery.com/ticket/3016. Le bug a 4 ans.

0

Utilisez ce code pour copier les valeurs textarea

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