2010-03-01 18 views
8

मेरे पास एक इनपुट फ़ील्ड है जिसे मैं एक सीएसएस क्लास के माध्यम से डेटपिकर के रूप में परिभाषित करता हूं। अब मैं इस इनपुट फ़ील्ड को क्लोन करना चाहता हूं और ऐसा इसलिए है कि क्लोन इनपुट भी डेटपिकर्स हैं।क्लोनिंग डेटपिकर ऑब्जेक्ट्स [JQuery]

विभिन्न स्रोतों से पढ़ने के बाद मुझे विश्वास था कि निम्नलिखित कोड काम करना चाहिए लेकिन ऐसा नहीं है। शायद मुझे उम्मीद थी किसी की मदद कर सकता है मुझे यह पता लगाने की मैं गलत क्या कर रहा था :)

<input type="text" id="date" name="date" class="calendar" /> 
<input type="button" id="clone" name="clone" value="Clone dates" /> 

और यहाँ जावास्क्रिप्ट है:

<script type="text/javascript"> 
$(document).ready(function(){ 

$('.calendar').datepicker(); 

$('#clone').click(function() 
{ 
    $('.calendar:last').clone().append().insertAfter('.calendar:last'); 
}); 

}); 

</script> 

अब तक इनपुट क्षेत्र दोहराया गया है और पिछले के बाद कम से डाला जाता है उदाहरण लेकिन डेटपिकर काम नहीं करता है। मैंने क्लोन फ़ंक्शन में 'सत्य' पारित करने का प्रयास किया लेकिन मुझे यह त्रुटि मिली कि इंस्ट को परिभाषित नहीं किया गया था।

किसी भी मदद की सराहना की जाएगी किया :)

उत्तर

14

इस के बदले यह:

$('.calendar:last').clone(false).removeClass('hasDatepicker').insertAfter('.calendar:last').datepicker(); 
+0

यह इनपुट क्लोन लेकिन यह datepicker वस्तु का निर्माण नहीं करता है (यह एक त्रुटि या तो जो इसे बनाता है नहीं देता है और भी भ्रमित) – Gazillion

+0

स्पष्ट रूप से आपको डेटपिकर() को कॉल करने से पहले 'हैडडेटिकर' कक्षा को हटाना होगा। मैंने पोस्ट अपडेट किया है। –

+0

धन्यवाद! यह तय है! – Gazillion

5

बुरा करने के लिए मैं ऊपर दिए गए जवाब पर अब और टिप्पणी नहीं कर सकता, लेकिन अभी भी कोड Fales! डेटपिकर क्लोन इनपुट तत्व पर दिखाई देता है, लेकिन मूल इनपुट फ़ील्ड में चयनित दिनांक मान का उपयोग करता है और क्लोन इनपुट फ़ील्ड को खाली छोड़ देता है .. कोई सुझाव?

संपादित करें:

निम्नलिखित कोड मेरे लिए यह तय का उपयोग करना ..

$('.datum',clone).removeClass("hasDatepicker").attr('id',"").datepicker(); 

(ध्यान दें कि मैं एक आवरण क्लोन है, और केवल कि आवरण में 'गृहीत' इनपुट क्षेत्र लक्षित कर रहा हूं)

उपरोक्त सुझाव के अनुसार कक्षा को हटाने के बाद, मैं क्लोन इनपुट तत्व की आईडी भी हटा देता हूं। यह मूल जैसा ही है, इसलिए मैं मूल इनपुट फ़ील्ड को डेटपिकर बॉक्स में चयनित दिनांक के साथ अपडेट कर रहा था।

+1

' आईडी' मुद्दा है। '.datepicker()' प्लगइन तत्व को एक यादृच्छिक आईडी निर्दिष्ट करता है जो उसके बाद उस डेटापिकर ऑब्जेक्ट से संबद्ध होता है। 'क्लोन()' तब तत्व को क्लोन करते समय आईडी को बरकरार रखता है। ऐसा लगता है कि 'क्लोन()' शायद सेट की गई किसी भी आईडी को त्यागना चाहिए, यह देखते हुए कि आईडीआई को किसी दस्तावेज़ के रूप में अद्वितीय कैसे माना जाना चाहिए। – crush

+0

यह दृष्टिकोण मेरे लिए काम करता था, सिवाय इसके कि मैंने removeAttr ('id') का उपयोग किया था; धन्यवाद। – ekerner

0

मैंने निम्नलिखित परिवर्तन किए और यह काम करता है।

से पहले:

$('#clone').click(function() 
{ 
    $('.calendar:last').clone().append().insertAfter('.calendar:last'); 
}); 

के बाद:

$('#clone').click(function() 
{ 
    $('.calendar:last').clone().append().insertAfter('.calendar:last').attr('id',""); 
}); 
0

यह देर से एक छोटे से हो सकता है, लेकिन सभी सुझावों ऊपर मेरे लिए काम नहीं किया, मैं इस के लिए एक आसान समाधान के साथ आया था ।

सबसे पहले, समस्या का कारण क्या है: JQuery तत्व आईडी को डेटपिकर असाइन करें। यदि आप तत्व क्लोनिंग कर रहे हैं, तो उसी आईडी को भी क्लोन किया जा सकता है। जो jQuery पसंद नहीं है। आप या तो शून्य इनपुट त्रुटि या पहले इनपुट फ़ील्ड को असाइन की जाने वाली तारीख को प्राप्त कर सकते हैं चाहे आप जिस इनपुट फ़ील्ड पर क्लिक करते हैं।

समाधान:

1) को नष्ट datepicker 2) सभी इनपुट क्षेत्र 3) प्रत्येक इनपुट के लिए datepicker आवंटित

सुनिश्चित करें कि आपके इनपुट इस

<input type="text" name="ndate[]" id="date1" class="n1datepicker"> 
की तरह कुछ है करने के लिए नए अद्वितीय आईडी निर्दिष्ट

इससे पहले कि आप को क्लोन, datepicker

$('.n1datepicker').datepicker('destroy'); 
0 नष्ट

के बाद आप को क्लोन, इन पंक्तियों के रूप में अच्छी तरह

var i = 0; 
$('.n1datepicker').each(function() { 
    $(this).attr("id",'date' + i).datepicker(); 
    i++; 
}); 

जोड़ सकते हैं और जादू होता है

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