2010-07-14 12 views
22

jQuery में clone() फ़ंक्शन है जो वास्तविक समस्या को बिना किसी समस्या के क्लोन करता है, लेकिन यह फ़ॉर्म में दर्ज किए गए किसी भी मान को सुरक्षित नहीं करता है।क्या jQuery या जावास्क्रिप्ट में फॉर्म फ़ील्ड मान क्लोन करने का कोई तरीका है?

क्या इसके आसपास जाने का कोई तरीका है?

नमूना कोड की बहुत सराहना की जाएगी।

+0

आप थोड़ा और अधिक संदर्भ दे सकते हैं? एक त्वरित परीक्षण में कोई समस्या नहीं है: http://jsfiddle.net/meGyg/ –

+0

मुझे लगता है कि समस्या यह है कि यदि आप फ़ॉर्म के माध्यम से डेटा बदलते हैं, और फिर इसे क्लोन करने का प्रयास करें। अपने पहेली को फोर्क किया: http://jsfiddle.net/F9aWu/ फॉर्म को बदलने का प्रयास करें, फिर क्लोन पर क्लिक करें। – hookedonwinter

+0

या @ [निक क्रेवर] का समाधान टेक्स्टरेरा भाग – hookedonwinter

उत्तर

7

नोट्स से स्टेमिंग, यहां एक समाधान है। निम्न प्रपत्र के साथ:

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

यह jQuery textareas सहित, काम करता है:

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

    } 
) 

डेमो: http://jsfiddle.net/Jux3e/

0

आप इस 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

एक ही समस्या में पड़ गए, सरल उपाय:

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

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

चाल है कि इस डोम पेड़ में वास्तविक 'मूल्य' विशेषता अन्यथा डेटा आप पर से दर्ज 'बदल जाएगा, है -fly राज्य '

+0

क्या इससे बचने की आवश्यकता नहीं होगी? –

+1

@ChrisStryczynski मुझे ऐसा नहीं लगता है, टेक्स्ट इनपुट HTML प्रदर्शित नहीं कर सकता है, आप इसे पहले से पहले के मान पर सेट कर रहे हैं, और उद्धरण कोई समस्या नहीं है क्योंकि आप सादा HTML प्रिंट करने के बजाय स्ट्रिंग विशेषता मान सेट कर रहे हैं कोड। – sled

+0

यह इनपुट के लिए प्रभावी है: पाठ, लेकिन चेकबॉक्स, रेडियो बटन, टेक्स्ट क्षेत्र और इसी तरह के बारे में क्या? –

0

इस समस्या को मिला' केवल डोम में मौजूद है 'और इस आवरण लिखा है:

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

यदि आप क्षेत्र में ही नकल करने की जरूरत है, इस टिन का समारोह relCopy

3

पाठ क्षेत्र मूल्यों क्लोन नहीं किया जा रहा के लिए एक और आसान ठीक अपने HTML में निम्न JavaScript फ़ाइल को शामिल करने के लिए है की जाँच करें: https://github.com/spencertipping/jquery.fix.clone

यह सिर्फ क्लोन विधि पैच इसलिए आप फ़ाइल को शामिल कर सकते हैं और फिर इसे भूल गए हैं। स्पष्ट रूप से चयन मूल्यों को क्लोन करने में कोई समस्या है और यह वही फ़ाइल उस समस्या को भी ठीक करती है।

यह फ़ाइल निम्न से जुड़ी थी: http://bugs.jquery.com/ticket/3016। बग 4 साल पुराना है। इस कोड को कॉपी करने के लिए पाठ क्षेत्र

0

उपयोग को महत्व देता

clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val()); 
संबंधित मुद्दे

 संबंधित मुद्दे