2010-10-18 6 views
20

कोई फर्क नहीं पड़ता कि मैं क्या प्रयास करता हूं, मैं अपने डेटपिकर पर पहले शो घटना को आग लगाने में सक्षम नहीं हूं। यहाँ मेरी कोड है:इससे पहले कि कार्यक्रम jQueryUI डेटपिकर पर गोलीबारी नहीं कर रहा है

$('#calendar').datepicker({ 
inline: true, 
dateFormat: 'mm,dd,yy', 
beforeShow: function(input, inst) { alert('before'); } 
}); 

मैं अपने datepicker को beforeShowDay और onSelect घटनाओं जोड़ दिया है, और वे सही ढंग से आग से करते हैं। क्या किसी और के साथ परेशानी है?

+1

jquery और jqueryUI के कौन से संस्करण आप उपयोग कर रहे हैं? – Leopd

उत्तर

0

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

$('#calendar').datepicker({ 
inline: true, 
dateFormat: 'mm,dd,yy', 
beforeShow: function() { 
    setTimeout(function() { 
     alert('before'); 
    }, 10); 
} 
}); 
+0

श्रोताओं में झुकाव के बारे में जाने का सही तरीका नहीं है। – lededje

4

मुझे इसके लिए एक फिक्स मिला। आप jquery.ui.datepicker.js में कोड की 3 लाइनों को जोड़ना होगा (पूर्ण संस्करण)

के पास लाइन # 274,, इस लाइन के बाद इस this._updateAlternate(inst);

अधिकार का अनुसरण कर दिया:

var beforeShow = $.datepicker._get(inst, 'beforeShow'); 
if(beforeShow) 
    beforeShow.apply(); 

jqueryui.com से संस्करण इनलाइन डेटपिकर के लिए सक्षम सक्षम नहीं है। इस कोड के साथ, शो सक्षम होने से पहले।

+0

जैसा कि उत्तर में बताया गया है, यह विधि शो से पहले सक्षम होगी। हालांकि, 'इनपुट' और' inst' पैरामीटर इस तरह से उपलब्ध नहीं हैं जैसे कि http://jqueryui.com/demos/datepicker/#event-beforeShow –

5

वास्तव में, यह एक छोटे से अधिक सही है (और प्लगइन/वर्ग पद्धति का अनुसरण):

var beforeShow = $.datepicker._get(inst, 'beforeShow'); 
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(target, [target, inst]) : {})); 
+0

पर परिभाषित किया गया है क्योंकि यह उत्तर में स्पष्ट नहीं है, मैं इंगित करना चाहता हूं यह कोड '_inlineDatepicker' विधि' लाइन के ठीक बाद 'this._update वैकल्पिक (inst) 'के बाद चला जाता है। पूर्ण jquery-ui-1.8 में।23.js, यह लाइन 7156 पर होगा। –

23

यहाँ समाधान मेरी टीम इतनी के साथ आया था हम jQuery फ़ाइलों को संशोधित करने के लिए याद करने की जरूरत नहीं है हर बार एक अद्यतन है। बस अपनी स्वयं की स्क्रिप्ट में जोड़ने और शामिल यह:

(function ($) { 
    $.extend($.datepicker, { 

     // Reference the orignal function so we can override it and call it later 
     _inlineDatepicker2: $.datepicker._inlineDatepicker, 

     // Override the _inlineDatepicker method 
     _inlineDatepicker: function (target, inst) { 

      // Call the original 
      this._inlineDatepicker2(target, inst); 

      var beforeShow = $.datepicker._get(inst, 'beforeShow'); 

      if (beforeShow) { 
       beforeShow.apply(target, [target, inst]); 
      } 
     } 
    }); 
}(jQuery)); 
+2

यह सही उत्तर है। पूरी तरह से काम किया। धन्यवाद! – Matt

1

मैं beforeShow उपयोग करने के लिए एक अंतिम तिथि datepicker पर न्यूनतम भी दिनांक को अपडेट करने तिथि प्रारंभ तिथि से datepicker में सेट को प्रतिबिंबित करना चाहता था। मैंने यहां और अन्य जगहों पर पोस्ट किए गए कई समाधानों को बताया है जो जटिल थे। मुझे कुछ याद आ रहा है लेकिन मेरे लिए निम्नलिखित सीधे सीधा कोड काम करता है।

यह तब तक प्रारंभ तिथि पर फ़ोकस रीसेट करता है यदि कोई भी सेट नहीं किया गया है और अंतिम तिथि दर्ज करने का प्रयास किया गया है। यदि प्रारंभ तिथि सेट की गई है तो यह उचित _Date के लिए न्यूनतम तिथि निर्धारित करती है।

$(function(){ 
    $("#start_Date").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: "c-1:c+5", 
     dateFormat: "dd-mm-yy" 
    }); 
    $("#end_Date").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: "c-1:c+5", 
     dateFormat: "dd-mm-yy", 
     beforeShow: end_Range 
    }); 

    function end_Range(){ 
     if ($("#start_Date").datepicker("getDate") == null){ 
      $("#start_Date").focus(); 
     } else { 
      // set minimum date range 
      $("#end_Date").datepicker("option", "minDate", new Date ($("#start_Date").datepicker("getDate"))); 
     }; 
    }; 
}); 

तिथि खाने के साथ:

<label>Date</label><input class="datepicker" id="start_Date" type="text"/> 
<label>Date</label><input class="datepicker" id="end_Date" type="text"/> 
0

आप इस तत्व से पहले करने के लिए datepicker() आवंटित किया है?

एक बार जब आप डेटपिकर() पहली बार असाइन करते हैं तो शो ईवेंट तत्व से संलग्न होता है। यदि आप उसी तत्व पर डेटपिकर() को पुन: असाइन करते हैं तो यह ठीक से काम नहीं करेगा।

डेटपिकर() को 'नष्ट' करने और पुन: असाइन करने का प्रयास करें जो मेरे लिए अच्छा काम है।

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

$('#calendar').datepicker({ 
    inline: true, 
    dateFormat: 'mm,dd,yy', 
    beforeShow: function(input, inst) { 
     alert('before'); 
    } 
}); 
संबंधित मुद्दे