इससे पहले कि आप इसे पढ़े, किसी दूसरे पृष्ठ की घटनाओं की इस सूची को खींच लें, एपीआई अपने आप में काफी सहायक है, और जो मैं नीचे चर्चा कर रहा हूं वह सब इस पृष्ठ से सीधे जुड़ा हुआ है ।
पहला, .click(function)वस्तुतः इसके लिए एक शॉर्टकट है .bind('click', function), वे समकक्ष हैं। एक हैंडलर को सीधे किसी तत्व से बांधते समय उनका उपयोग करें , जैसे:
$(document).click(function() {
alert("You clicked somewhere in the page, it bubbled to document");
});
यदि यह तत्व बदल जाता है या फेंक दिया जाता है, तो यह हैंडलर अब नहीं रहेगा। वे तत्व जो इस कोड को हैंडलर अटैच करने के लिए चलाए गए थे (जैसे कि चयनकर्ता ने तब पाया) तब हैंडलर नहीं मिलेगा।
.live()और .delegate()इसी तरह से संबंधित हैं, .delegate()वास्तव में .live()आंतरिक रूप से उपयोग करते हैं, वे दोनों बुलबुले की घटनाओं के लिए सुनते हैं। यह नए और पुराने तत्वों के लिए काम करता है , वे उसी तरह से बुलबुले बनाते हैं। जब आपके तत्व बदल सकते हैं, तो आप इनका उपयोग करते हैं, जैसे नई पंक्तियाँ, सूची आइटम इत्यादि जोड़ना, यदि आपके पास कोई अभिभावक / सामान्य पूर्वज नहीं है जो पृष्ठ में रहेगा और किसी भी बिंदु पर प्रतिस्थापित नहीं किया जाएगा .live(), तो इस तरह का उपयोग करें:
$(".clickAlert").live('click', function() {
alert("A click happened");
});
यदि फिर भी आपके पास कोई मूल तत्व है जो प्रतिस्थापित नहीं हो रहा है (इसलिए इसके ईवेंट हैंडलर अलविदा नहीं हैं) तो आपको इसे .delegate()इस तरह से संभालना चाहिए :
$("#commonParent").delegate('.clickAlert', 'click', function() {
alert("A click happened, it was captured at #commonParent and this alert ran");
});
यह लगभग वैसा ही काम करता है .live(), लेकिन कब्जा किए जाने से पहले घटना कम होती है और हैंडलर निष्पादित हो जाते हैं। इन दोनों का एक और आम उपयोग यह है कि आपकी कक्षा किसी तत्व में परिवर्तन करती है, अब आपके द्वारा उपयोग किए गए चयनकर्ता से मेल नहीं खाती है ... इन विधियों के साथ चयनकर्ता का मूल्यांकन घटना के समय किया जाता है , यदि यह मेल खाता है, तो हैंडलर चलता है ।। .तो तत्व अब चयनकर्ता मामलों से मेल नहीं खाता है, यह अब निष्पादित नहीं होगा। साथ .click()तथापि, ईवेंट हैंडलर DOM तत्व पर बाध्य सही है, तथ्य यह है कि यह मेल नहीं खाता जो कुछ चयनकर्ता यह पता लगाने के लिए इस्तेमाल किया गया था अप्रासंगिक है ... घटना बाध्य है और जब तक उस तत्व चला गया है यह रह गया है, या हैंडलर के माध्यम से हटा दिया जाता है .unbind()।
अभी तक के लिए एक और आम उपयोग .live()और .delegate()है प्रदर्शन । यदि आप बहुत सारे तत्वों के साथ काम कर रहे हैं , तो एक क्लिक हैंडलर को सीधे प्रत्येक तत्व से जोड़ना महंगा और समय लेने वाला है। इन मामलों में किसी एक हैंडलर को सेटअप करना अधिक किफायती है और बुदबुदाते हुए काम करते हैं, इस सवाल पर एक नज़र डालें जहाँ इससे बहुत फर्क पड़ा , यह एप्लिकेशन का एक अच्छा उदाहरण है।
ट्रिगर - अद्यतन किए गए प्रश्न के लिए
2 मुख्य ईवेंट-हैंडलर ट्रिगरिंग फ़ंक्शन उपलब्ध हैं, वे एपीआई में एक ही "इवेंट हैंडलर अटैचमेंट" श्रेणी के अंतर्गत आते हैं, ये हैं .trigger()और .triggerHandler()। .trigger('eventName')आम घटनाओं के लिए अंतर्निहित कुछ शॉर्टकट हैं:
$().click(fn); //binds an event handler to the click event
$().click(); //fires all click event handlers for this element, in order bound
आप यहां इन शॉर्टकट सहित एक सूची देख सकते हैं ।
अंतर के लिए, .trigger()इवेंट हैंडलर को ट्रिगर करता है (लेकिन अधिकांश समय डिफ़ॉल्ट क्रिया नहीं, उदाहरण के लिए कर्सर को एक क्लिक में सही स्थान पर रखकर <textarea>)। यह घटना संचालकों को उस क्रम में घटित करने का कारण बनता है जिस क्रम में वे (मूल घटना के रूप में) बंधे हुए थे, मूल घटना के कार्यों को आग लगाते हैं, और डोम को बुलबुले लगाते हैं।
.triggerHandler()आमतौर पर एक अलग उद्देश्य के लिए, यहां आप केवल बाउंड हैंडलर को आग लगाने की कोशिश कर रहे हैं, यह मूल घटना को आग लगाने का कारण नहीं बनता है, उदाहरण के लिए एक फॉर्म सबमिट करना। यह DOM को बबल नहीं करता है, और यह चेनेबल नहीं है (यह उस ईवेंट रिटर्न के लिए अंतिम बाउंड इवेंट हैंडलर जो भी देता है)। उदाहरण के लिए यदि आप किसी focusघटना को ट्रिगर करना चाहते हैं, लेकिन वास्तव में ऑब्जेक्ट पर ध्यान केंद्रित नहीं करना चाहते हैं, तो आप चाहते हैं कि कोड आपको .focus(fn)चलाने के लिए बाध्य हो , यह ऐसा करेगा, जबकि .trigger()ऐसा करने के साथ-साथ वास्तव में तत्व और बुलबुले को ध्यान में रखना होगा ।
यहाँ एक वास्तविक दुनिया उदाहरण है:
$("form").submit(); //actually calling `.trigger('submit');`
यह किसी भी सबमिट हैंडलर को चलाएगा, उदाहरण के लिए jQuery सत्यापन प्लगइन , फिर सबमिट करने का प्रयास करें <form>। हालाँकि, यदि आप इसे केवल मान्य करना चाहते थे, क्योंकि यह एक submitइवेंट हैंडलर के माध्यम से तैयार किया गया <form>था, लेकिन बाद में सबमिट नहीं किया गया, तो आप .triggerHandler('submit')इस तरह का उपयोग कर सकते हैं :
$("form").triggerHandler('submit');
प्लगइन हैंडलर को फ़ॉर्म को बम से बाहर भेजने से रोकता है अगर सत्यापन जाँच पास नहीं होती है, लेकिन इस पद्धति से हमें परवाह नहीं है कि वह क्या करता है। चाहे वह निरस्त हो या नहीं , हम फॉर्म जमा करने की कोशिश नहीं कर रहे हैं , हम इसे फिर से सत्यापित करने के लिए ट्रिगर करना चाहते हैं और कुछ नहीं करते हैं। ( अस्वीकरण: यह एक शानदार उदाहरण है क्योंकि .validate()प्लगइन में एक विधि है, लेकिन यह इरादे का एक अच्छा उदाहरण है)