2011-12-09 17 views
5

मान लिया जाये कि मैं सिर्फ एक तत्व के लिए एक साधारण क्लिक हैंडलर अनुलग्न करना चाहते हैं, मैं हमेशा इस किया है:क्या मुझे इवेंट हैंडलर संलग्न करने के लिए .on() या .click() का उपयोग करना चाहिए?

$("#mydiv").click(function() { ... }); 

JQuery डॉक्स को देखते हुए, ऐसा लगता है कि .on() "सुझाए गए" ईवेंट हैंडलर्स संलग्न करने के लिए रास्ता है और .bind(), .delegate() और .live() की जगह:

jQuery 1.7 के रूप में, .on() विधि ईवेंट हैंडलर्स संलग्न के लिए आवश्यक सभी सुविधा प्रदान करता है। पुराने jQuery ईवेंट विधियों से कनवर्ट करने में सहायता के लिए, .bind(), .delegate(), और .live() देखें।

और डॉक्स .click() के लिए यह कहते हैं:

इस विधि पहले दो रूपों में .bind के लिए एक शॉर्टकट ('क्लिक', हैंडलर), और .trigger है ('क्लिक ') तीसरे में।

तो यह संकेत मिलता है कि .click().bind() जिसका बहिष्कार और प्रतिस्थापित किया जाएगा .on() से, सही उपयोग कर रहा है? या यह संकेत है कि .click() चारों ओर टिकेगा, लेकिन यह किसी बिंदु पर .on("click") के लिए शॉर्टकट बन जाएगा?

Variant 1: $("#mydiv").click(function() { ... }); 

या:

Variant 2: $("#mydiv").on("click", function() { ... }); 

मूल रूप से, मेरे सवाल यह ... जब JQuery कोड लिखने आज, मैं का उपयोग करना चाहिए है?

+0

आपको विरासत कोड के बारे में चिंता करने की ज़रूरत नहीं है, यह बेहद असंभव है कि वे क्लिक शॉर्टैंड को पूरी तरह से हटा देंगे। .on() हैंडलर एक मैप किए गए ईवेंट में अतिरिक्त जानकारी जोड़ने के लिए, एक ही समय में एकाधिक ईवेंट-हैंडलर संलग्न करने में सक्षम होने से ईवेंट हैंडलर को जोड़ने का एक और अधिक प्रभावी तरीका है! – Khez

उत्तर

4

व्यक्तिगत रूप से मैं jQuery 1.7+ से सभी ईवेंट बाइंडिंग के लिए on() का उपयोग करूंगा।

इसका मतलब है कि उन तत्वों के बीच कोई अस्पष्टता नहीं है जो गतिशील रूप से जोड़े गए हैं और पृष्ठ लोड पर उपलब्ध हैं।

इसके अलावा, जैसा कि आप कहते हैं, click() (और अन्य ईवेंट शॉर्टकट) को jQuery द्वारा on("event", function() { ... }); में परिवर्तित कर दिया गया है, इसलिए यह प्रक्रिया में एक कदम बचाता है - यह नहीं कि यह निश्चित रूप से एक उल्लेखनीय अंतर बनाता है।

और अंत में, on("click") मेरी राय में बेहतर पढ़ता है।

+0

दस्तावेज़ बताते हैं कि .click() को .bind() में परिवर्तित किया गया है, .on() पर नहीं। यही कारण है कि मैं उलझन में हूँ। – njr101

+2

1.7+ 'क्लिक() 'में' चालू()' में परिवर्तित हो गया है। मुझे लगता है कि उन्होंने अभी तक दस्तावेज़ों को अद्यतन किया है। –

+0

उत्तर स्पष्ट रोरी के लिए धन्यवाद। मैंने पुष्टि करने के लिए JQuery 1.7 स्रोत को देखा - यह नहीं कि मैं आपको भरोसा नहीं करता;) .click() कॉल वास्तव में .bind() में परिवर्तित हो जाती है क्योंकि दस्तावेज़ कहते हैं। लेकिन .bind() बदले में .on() में परिवर्तित हो गया है। तो हाँ, तुम बिल्कुल सही हो। – njr101

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