2012-01-27 7 views
5

मुझे एक ऑन-सिलेक्ट इवेंट हैंडलर के साथ डेटपिकर मिला है। बाद में मेरे कार्यक्रम में, मैं अन्य हैंडलर पर चयन करना चाहता हूं। समस्या यह है कि वे पहले व्यक्ति को मिटा देते हैं। (Fiddle।)एक jquery-ui डेटपिकर उदाहरण में अतिरिक्त ईवेंट हैंडलर कैसे जोड़ें?

मैं ऐसा करने के बिना अतिरिक्त हैंडलर कैसे जोड़ सकता हूं?

+1

लगता है इससे पहले कि यह कहा गया है: http://stackoverflow.com/q/2241725/1030169 – jmoerdyk

+0

मैंने सोचा कि यह हो सकता है, लेकिन यह भी नहीं मिला है, धन्यवाद। – sprugman

उत्तर

1

आप अपनी इच्छित कॉल को सरणी में बनाए रख सकते हैं;

var firstHandler = function(dateText, inst) { 
    console.log('Original Handler', dateText, inst); 
}; 

var secondHandler = function(dateText, inst) { 
    console.log('Second Handler', dateText, inst); 
}; 

$('#datepicker').datepicker({ 
    onSelect: function() { 
     var sinks = $(this).data("mySelects"); 
     for (var i = 0; i < sinks.length; i++) 
      sinks[i].apply(this, arguments); 
    } 
}).data("mySelects", [firstHandler]); 

$('#addBtn').click(function(event) { 
    $('#datepicker').data('mySelects').push(secondHandler); 
    $('#datepicker').data('mySelects').push(nthHandler); 
}); 
+0

धन्यवाद। मैंने अभी कोडिंग समाप्त कर दी थी कि जब मैंने ऊपर टिप्पणी देखी थी। मुझे लगता है कि जुड़ा हुआ समाधान थोड़ा और सुरुचिपूर्ण है। अद्यतन: वास्तव में, आपका संस्करण मेरी तुलना में अधिक सुरुचिपूर्ण है। हम्म ... – sprugman

+0

यह समाधान कई स्थितियों में ठीक काम करता है (इसके बजाय लिंक किए गए समाधान काम नहीं करते हैं, अगर पहले हैंडलर में, एक चर है जो पहले हैंडलर के संदर्भ से आता है)। मुझे दस्तावेज कहां मिल सकता है जो मुझे समाधान बताता है? मैं समझ नहीं पा रहा हूं, उदाहरण के लिए, तर्क चर। –

+0

'.apply (यह, तर्क) 'फ़ंक्शन को' सिंक [] 'में कॉल करता है यह सुनिश्चित करने के लिए कि यह' हैंडलर में सही है। यह 'तर्क' ऑब्जेक्ट को उन सभी तर्कों को पारित करने के लिए भी पास करता है जिन्हें मूल रूप से प्राप्त किया गया था ('दिनांक टेक्स्ट' और 'inst')। https: // developer.mozilla.org/en/जावास्क्रिप्ट/संदर्भ/Functions_and_function_scope/arguments' –