2011-01-27 15 views
9

जोड़ा मैं एक jQuery datepicker समारोह "जन्मदिन" इनपुट एचटीएमएल तत्व के लिए बाध्य, पृष्ठ शीर्षक में लिखा है:jQuery datepicker एक AJAX पर काम नहीं करेगा HTML तत्व

<script type="text/javascript"> 
    $(function() { 
     $("#birthday").datepicker(); 
    }); 
</script> 

इसके बाद, मैं कुछ AJAX है कार्यक्षमता - यह पृष्ठ पर नया इनपुट HTML तत्व जोड़ता है। यही कारण है कि तत्व है:

<input type="text" id="birthday" value="" class="detail-textbox1" /> 

कि जन्मदिन तत्व पर क्लिक करने से पॉप अप नहीं करता पाठ फ़ील्ड के नीचे दिनांक पिकर। मुझे इसकी उम्मीद थी, क्योंकि पेज लोड होने के बाद तत्व जोड़ा जाता है, इस प्रकार यह हेडर में दिए गए फ़ंक्शन के संबंध में नहीं है।

मैं इसे कैसे काम कर सकता हूं? मैंने स्क्रिप्ट को हेडर से शरीर में ले जाने की कोशिश की, लेकिन कुछ भी काम नहीं करता है। धन्यवाद।

पीएस यदि मैं पेज बॉडी में आईडी = "जन्मदिन" के साथ इनपुट एचटीएमएल तत्व बनाता हूं, तो प्रत्येक व्यक्ति अपेक्षित काम करता है। ऐसा प्रतीत होता है कि केवल AJAX के माध्यम से जोड़े गए तत्व निष्क्रिय हैं। http://api.jquery.com/live/

$('#birthday').bind('load', function() { 
    $(this).datepicker(); 
}); 

संपादित

.live() documentation राज्यों, कि यह थोड़ा पुराना हो चुका है:

उत्तर

4

आप) .live उपयोग करने के लिए (ताकि किसी भी नए जोड़े तत्वों ईवेंट हैंडलर संलग्न की जरूरत है । Jquery (1.7+) के नए संस्करणों के साथ .on() का उपयोग करें।

+2

धन्यवाद जेके। .live() का उपयोग करना समस्या हल करता है। आपके उदाहरण के बजाय, मैंने $ ('# जन्मदिन') का उपयोग किया। लाइव ('फोकस', फ़ंक्शन() {$ (यह) .डेटपिकर();}); – Boris

+0

@ बोरीस .datepicker() फ़ंक्शन पिकर बनाता है, इसलिए आपको केवल इसे एक बार कॉल करने की आवश्यकता है। लेकिन यह वास्तव में बहुत अधिक चोट नहीं पहुंचाएगा मुझे लगता है कि यह हर बार ध्यान केंद्रित करने के लिए करता है (लेकिन यह इससे कम कुशल है)। –

+1

अगर मैं 'फोकस' को 'लोड' में बदलता हूं तो यह बिल्कुल काम नहीं करता है। साथ ही, मैंने देखा है कि जब मैं डेटपिकर में टैब करता हूं और टैब आउट करता हूं (बिना किसी मूल्य का चयन किए), मेरी AJAX/php स्क्रिप्ट्स में से कोई भी काम नहीं करता है। ?!?! मैं क्या गलत कर रहा हूं? – Boris

0

आप अपने ajax सफलता कॉलबैक के भीतर नए जोड़े गए तत्व के लिए दिनांक पिकर को प्रारंभ कर सकते हैं:

$.ajax({ 

    ... 

    success: function(response) { 
     if(response.success) { 
       $(body).append(response.html); 
       $("#birthday").datepicker(); 
     } 
    } 
}); 
1

बोरिस, जे: यह मेरे लिए सुपर मददगार था। मैंने यह भी पाया है कि आप आप Datepicker का दिनांक सीमा का चयन उपयोग करना चाहते हैं AJAX एचटीएमएल लिए निम्न का उपयोग कर सकते हैं:

$('#groundtransporation').live('focus', function() { 
var gt = $("#rentalPickUp, #rentalDropOff").datepicker({ 
    defaultDate: "+1w", 
    changeMonth: true, 
    numberOfMonths: 2, 
    onSelect: function(selectedDate) { 
    var option = this.id == "rentalPickUp" ? "minDate" : "maxDate", 
     instance = $(this).data("datepicker"), 
     date = $.datepicker.parseDate(
     instance.settings.dateFormat || 
     $.datepicker._defaults.dateFormat, 
     selectedDate, instance.settings); 
    gt.not(this).datepicker("option", option, date); 
    } 
}); 
}); 
+0

यहां ध्यान दें कि वर्तमान में पृष्ठ पर मौजूद तत्वों के साथ-साथ बाद में बनाए गए तत्वों के लिए लाइव विधि बाइंड है, इस प्रकार बाद में डीटीपीकर नहीं होने वाले तत्वों की समस्या को हल करना। हालांकि, लाइव विधि अब – BuddhiP

16

मैं पार्टी के लिए थोड़ी देर हो चुकी हूँ, लेकिन पूर्णता के लिए - और किया जा रहा है .live() समारोह के साथ deprecated from jQuery 1.7 आगे - मैंने सोचा कि मैं अपने अनुभवों के आधार पर एक अद्यतन समाधान प्रदान करूंगा, और स्टैक ओवरव्लो पर अन्य उत्तरों से मिली सभी मदद से!

मैं एक स्थिति है जहाँ मैं इनपुट फ़ील्ड कि डोम को जोड़ा जा रहा था के माध्यम से AJAX यादृच्छिक पर कॉल करने के लिए datepicker कार्यक्षमता जोड़ने के लिए की जरूरत थी, और मुझे स्क्रिप्ट AJAX datepicker कार्यक्षमता संलग्न करने के लिए कहता है बनाते हुए बदल नहीं कर सकता है, इसलिए मैं अपने प्रतिनिधिमंडल सुविधाओं के साथ नई चमकदार .on() समारोह के लिए चुना:

// do this once the DOM's available... 
$(function(){ 

    // this line will add an event handler to the selected inputs, both 
    // current and future, whenever they are clicked... 
    // this is delegation at work, and you can use any containing element 
    // you like - I just used the "body" tag for convenience... 
    $("body").on("click", ".my_input_element", function(){ 

     // as an added bonus, if you are afraid of attaching the "datepicker" 
     // multiple times, you can check for the "hasDatepicker" class... 
     if (!$(this).hasClass("hasDatepicker")) 
     { 
      $(this).datepicker(); 
      $(this).datepicker("show"); 
     } 
    }); 
}); 

मुझे आशा है कि यह किसी को मदद करता है, और सभी उत्तर के लिए धन्यवाद अब तक कि मुझे इस समाधान है कि मेरे लिए काम किया करने के लिए नेतृत्व! :)

+0

के पक्ष में बहिष्कृत है, मेरे पास jquery 1.7 का उपयोग करने के अलावा कोई विकल्प नहीं है क्योंकि यह काम पर एक आवश्यकता है। : '(लेकिन, ऊपर जो दिखा रहा है उसका jQuery 1.7 संस्करण मेरे लिए काम नहीं करता है।:/तो, निराशाजनक। – user919860

+0

@ user919860 - फ़ंक्शन को हटा दिया गया है, हटाया नहीं गया है, इसलिए आप अभी भी उपयोग करने में सक्षम हैं जहां तक ​​मुझे पता है कि 'live()' फ़ंक्शन में 'लाइव()' फ़ंक्शन ... 'लाइव()' फ़ंक्शन से संबंधित jQuery वेबसाइट पर दस्तावेज़ वास्तव में अच्छा है, और आप इसे यहां देख सकते हैं [http: // api .jquery.com/live /)। वे jQuery के पुराने संस्करणों के उपयोग के लिए 'प्रतिनिधि()' फ़ंक्शन का उपयोग करने की भी अनुशंसा करते हैं, और उस फ़ंक्शन के विवरण दस्तावेज़ में उसी पृष्ठ पर हैं, लेकिन अगर आप हैं तो चिल्लाओ अभी भी संघर्ष! :) –

1

मुझे एक और मामला मिला। मेरी स्क्रिप्ट डेटपिकर सहित अंतिम तालिका तत्वों की प्रतिलिपि बना रही है।

jquery काम नहीं करेगा क्योंकि कॉपी किए गए तत्व ने चिह्नित किया है कि यह "हैडपिकर" है।

नए तत्व में डेटपिकर को सक्रिय करने के लिए, उस वर्ग का नाम हटाएं और इसे शुरू करें।

$ ("# yournewelementid")। Attr ("class", "your-class-name"); $ ("# yournewelementid")। Datepicker();

1

आपकी समस्या तब होती है जब तत्व प्रारंभ नहीं होने पर तत्व मौजूद नहीं होते हैं।

जब आप $ (फ़ंक्शन() {/** कुछ कोड **/} का उपयोग करते हैं); तत्वों को दस्तावेज़ पर बाहर निकलना होगा, इसका मतलब है कि एचटीएमएल पर होना चाहिए ताकि आप घटक को आरंभ करने के लिए कोई फ़ंक्शन बना सकें या इसे दस्तावेज़ में जोड़ने के बाद सफलता कार्यक्रम पर प्रारंभ कर सकें।

पहले इसे प्रारंभ करने का प्रयास करने से पहले दस्तावेज़ में AJAX अनुरोध में बाहरी HTML लोड जोड़ने के लिए महत्वपूर्ण है या यह बिल्कुल प्रारंभ नहीं होगा।
उदाहरण:

$ .ajax ({
        यूआरएल: "ajax_html.html",
        डेटाप्रकार: "html"
})। किया (समारोह (एचटीएमएल) {
        $ ("# चयनकर्ता")। html (एचटीएमएल)
        init();
}); ।

समारोह init() {
        $ ("। जन्मदिन") datepicker ({});
}

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