2012-10-29 21 views
6

मैं टेक्स्टबॉक्स के साथ उपयोग के लिए एक jQuery प्लगइन पर काम कर रहा हूं और मैं इसे jQueryUI विजेट्स के साथ काम करना चाहता हूं जो टेक्स्टबॉक्स का उपयोग करते हैं, जैसे डेटपिकर। इससे मुझे समस्याएं आ रही हैं क्योंकि ऐसा लगता है कि मूल्य वास्तव में सेट होने से पहले डेटपिकर पर धुंधला घटना फेंक दी जाती है।jQuery डेटपिकर ब्लर इवेंट से जुड़े

मैंने जो वर्कअराउंड उपयोग किया है वह है कि मेरे कोड को निष्पादित करने से पहले एक टाइमआउट सेट करना है ताकि डेटपिकर्स मान सेट करने के लिए समय की अनुमति दी जा सके। नीचे कोड देखें:

$(this).blur(function() { 
    // $(this).val() == "" 
    var elem = $(this); 
    setTimeout(function() { 
     //elem.val() != "" 
    },100); 
}); 

मुझे यकीन नहीं है कि यह कामकाज समस्या का सबसे अच्छा समाधान है या फिर भी यह हमेशा काम करेगा। यदि मैं टाइमआउट को 100 के बजाय 10 मिलीसेकंड पर सेट करता हूं, तो यह काम नहीं करता है - मुझे चिंता है कि कोड किसी भी कारण से निष्पादित करने में धीमा है, तो 100 हमेशा पर्याप्त नहीं हो सकता है।

क्या कोई इस समस्या का बेहतर समाधान सोच सकता है?

उत्तर

6

पाने के लिए ui तर्क का उपयोग कर सकते हैं अगर सवाल में पाठ बॉक्स (hasDatepicker को चेक करके एक datepicker द्वारा किया जाता है कक्षा)। इसके साथ समस्या यह है कि आप इस घटना से बाध्य नहीं हो सकते हैं क्योंकि आप सामान्य रूप से डेटपिकर के पास केवल विशिष्ट फ़ंक्शन से जुड़ी एक फ़ंक्शन कर सकते हैं। इस मैं चेक के आसपास पाने के लिए अगर वहाँ एक समारोह है पहले से ही जुड़ा हुआ है, और यदि ऐसा है तो मेरे कोड के बाद इसे कहते:

var elem = $(this); 
var someFunction = function() { 
    //elem.val() != "" 
} 
if (elem.hasClass('hasDatepicker')) { 
    var onClose = elem.datepicker('option','onClose'); 
    elem.datepicker('option','onClose', function() { 
     someFunction(); 
     if (onClose) { onClose(elem.val()); } 
    }); 
} else { 
    elem.bind('blur',someFunction); 
} 
5

डेटपिकर में कई घटनाएं हैं जो आप onSelect या onClose और this में जोड़ सकते हैं, वह इनपुट है जो डेटपिकर चयनकर्ता है। आप datepicker अंत मेरी समाधान गतिशील onClose घटना में हुक करने की थी मूल्य भी

$(selector).datepicker({ 
    onClose:function(evt, ui){    
      $(this).myPlugin('someMethod'); 
    }) 
}) 
+0

$ () .डेटपिकर ('विकल्प', 'ऑनसेलेक्ट', फ़ंक्शन() {...}); – JakeRobb

0

यह यह करने के लिए आसान तरीका है: "। datepickerSelect"

$('#element').datepicker({ 
    onClose: function() { 
     $(this).trigger('change'); 
    } 
}); 


$('#element').bind('change',function(){ 
    // someFunction(); 
});