$ (दस्तावेज़) .on ('क्लिक', '#id', फ़ंक्शन () {}) बनाम $ ('# आईडी')। ('क्लिक', फ़ंक्शन () {}) [बंद]।


82

मैं यह पता लगाने की कोशिश कर रहा था कि क्या अंतर है

$(document).on('click', '#id', function(){});

तथा

$('#id').on('click', function(){});

अगर दोनों के बीच कोई अंतर है, और यदि ऐसा है तो क्या अंतर हो सकता है, इस बारे में मुझे कोई जानकारी नहीं मिल पाई है।

क्या कोई समझा सकता है कि क्या कोई अंतर है?


2
क्या आपने प्रलेखन पढ़ा या इस साइट पर कोई खोज की। चुने जाने के लिए कुछ मिलियन उत्तर होने चाहिए?
एडेनो

9
आपको इसका जवाब "भूख लगी है" हिप्पो मिलेगा, इस तथ्य के बावजूद कि यह स्पष्ट रूप से प्रलेखित है। पहला कोड कहता है "जब दस्तावेज़ पर क्लिक किया जाता है, अगर यह # आईडी की आईडी के साथ कुछ है तो इस कोड को ट्रिगर करें"। दूसरा व्यक्ति कहता है "जब कुछ भी जो वर्तमान में # आईडी की आईडी के साथ मौजूद है, इस कोड को ट्रिगर करें"। पहला ईवेंट उन तत्वों को ईवेंट असाइन करने के लिए है जो उस समय मौजूद नहीं हैं, लेकिन भविष्य में करेंगे। बाद में जोड़े गए किसी भी तत्व के लिए दूसरा फायर नहीं करेगा।
मोनिका सेलियो

6
मैंने दोनों किया, लेकिन जाहिर है कि पूरी तरह से पर्याप्त नहीं है। एक खोज कठिन है क्योंकि मुझे नहीं पता था कि क्या खोजना है। मुझे नहीं पता कि इसे क्या कहा जाता है।
स्टाइलफॉन

1
यह प्रलेखन में समझाया गया है on()। अभी बहुत कुछ करना
बाकी

8
यदि इसे रचनात्मक के रूप में बंद नहीं किया जाना चाहिए या क्योंकि प्रलेखन इसके लिए मौजूद है, तो लगभग 99.9% स्टैकओवरफ्लो सवालों को बंद कर देना चाहिए, इस स्थिति में शेष 0.1% खोजने के लिए शुभकामनाएं क्योंकि यह संभवतः व्यवसाय से बाहर हो जाएगा। वही अपमानजनक "बिंदु भूखा हिप्पोस" टिप्पणी के लिए जाता है।
cesoid

जवाबों:


69

पहला उदाहरण घटना प्रतिनिधिमंडल को दर्शाता है । ईवेंट हैंडलर DOM ट्री (इस मामले में document) से ऊपर एक तत्व से जुड़ा होता है और जब कोई ईवेंट उस तत्व तक पहुंचता है, जो एलिमेंट से मेल खाते तत्व से उत्पन्न होता है , तो उसे निष्पादित किया जाएगा।

यह संभव है क्योंकि अधिकांश DOM इवेंट मूल बिंदु से पेड़ को बुलबुला बनाते हैं। यदि आप #idतत्व पर क्लिक करते हैं , तो एक क्लिक ईवेंट उत्पन्न होता है जो सभी पूर्वजों तत्वों ( साइड नोट) के माध्यम से बबल जाएगा : इससे पहले वास्तव में एक चरण होता है, जिसे 'कैप्चर चरण' कहा जाता है, जब ईवेंट पेड़ से नीचे आता है लक्ष्य )। आप उन पूर्वजों में से किसी पर भी इस घटना को पकड़ सकते हैं।

दूसरा उदाहरण इवेंट हैंडलर को सीधे तत्व से बांधता है। घटना तब भी बुदबुदाएगी (जब तक कि आप उस हैंडलर को रोकते नहीं हैं) लेकिन चूंकि हैंडलर लक्ष्य के लिए बाध्य है, इसलिए आपको इस प्रक्रिया के प्रभाव दिखाई नहीं देंगे।

किसी ईवेंट हैंडलर को सौंपकर, आप यह सुनिश्चित कर सकते हैं कि इसे उन तत्वों के लिए निष्पादित किया जाए जो बाध्यकारी के समय DOM में मौजूद नहीं थे। यदि आपका #idतत्व आपके दूसरे उदाहरण के बाद बनाया गया था, तो आपका हैंडलर कभी भी निष्पादित नहीं करेगा। निष्पादन के समय आप जिस तत्व को जानते हैं, उसे निश्चित रूप से DOM में बांधने से, आप यह सुनिश्चित करते हैं कि आपका हैंडलर वास्तव में किसी चीज़ से जुड़ा होगा और बाद में उचित रूप से निष्पादित किया जा सकता है।


1
मैं जानना चाहता हूं कि कौन सा प्रतिनिधि घटना को तेजी से बढ़ाता है। मैं अपने jquery कोड की गुणवत्ता में सुधार करना चाहता हूं। चूंकि DOM से डेलिगेटिंग इवेंट #Element से इवेंट को डेलिगेट करने में बहुत कम समय लेता है। कृपया अपने विचार साझा करें
अरुण जी

1
@James Allardice - बाद के तरीके का उपयोग करते हुए, $(document).on('click', $('#id'), function()...मैं $(this)संदर्भ के लिए कैसे उपयोग कर सकता हूं $('#id')? $(this)वर्तमान में संदर्भित है document- जिसे मैं समझता हूं।
चेशायरोक्टोपस

13

निम्नलिखित कोड पर विचार करें

<ul id="myTask">
  <li>Coding</li>
  <li>Answering</li>
  <li>Getting Paid</li>
</ul>

अब, यहाँ अंतर है

// Remove the myTask item when clicked.
$('#myTask').children().click(function () {
  $(this).remove()
});

अब, अगर हम फिर से एक myTask जोड़ते हैं तो क्या होगा?

$('#myTask').append('<li>Answer this question on SO</li>');

इस myTask आइटम पर क्लिक करने से यह सूची से नहीं हटेगी, क्योंकि इसमें कोई ईवेंट हैंडलर बंधा हुआ नहीं है। यदि इसके बजाय हम उपयोग करते हैं .on, तो नया आइटम हमारी ओर से बिना किसी अतिरिक्त प्रयास के काम करेगा। यहाँ .on संस्करण कैसा दिखेगा:

$('#myTask').on('click', 'li', function (event) {
  $(event.target).remove()
});

सारांश:

के बीच का अंतर .on()और .click()है कि हो सकता है .click()जब साथ जुड़े डोम तत्वों काम नहीं कर सकता .click()घटना बाद में किसी समय गतिशील रूप से जोड़ा जाता है, जबकि .on()स्थितियों में, जहां के साथ जुड़े डोम तत्वों में इस्तेमाल किया जा सकता .on()कॉल बाद में किसी समय गतिशील रूप से उत्पन्न हो सकती है।


भूषण, क्या बाद के बजाय पूर्व का उपयोग करने का कोई कारण है?
सीन

@SzilardMagyar मुझे लगता है कि मैंने अपने उत्तर के सारांश अनुभाग में उत्तर दिया है ..
भूषण फिरके

अच्छी जानकारी!
अब्दुल अजीज अल बसीर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.