क्या कोई मुझे समझा सकता है कि ऑर्डर हैंडलर को कैसे कार्यान्वित किया जा रहा है, इस आधार पर उसमें कोई अंतर क्यों है? नीचे दिए गए उदाहरण में मैं विभिन्न DOM
तत्वों पर एक विशिष्ट ईवेंट को संभालने के लिए .on()
और .addEventListener()
विधियों का उपयोग कर रहा हूं।jQuery .on(); बनाम जावास्क्रिप्ट .addEventListener();
jsfiddle: http://jsfiddle.net/etsS2/
मैंने सोचा था कि इस विशिष्ट उदाहरण में जिस क्रम में ईवेंट हैंडलर्स event-bubbling
पर निर्भर करेगा निष्पादित करने के लिए जा रहे हैं - तो मूल घटना target
से शुरू और अप करने के लिए आगे बढ़ document
तत्व।
document.getElementById('outer').addEventListener('mouseup', function (event) {
//$('#outer').on('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
अगर मैं uncomment on();
संस्करण सब कुछ काम करता है के रूप में उम्मीद - वहाँ में कैसे jQuery
सादा JavaScript
के विपरीत घटनाओं संभालती एक अंतर है?
'वापसी झूठी' भी एक घटना ईवेंट हैंडलर में 'event.preventDefault() 'साथ ही' event.stopPropagation() 'करता है। – Jasper
कारण मैंने इस संरचना को बनाया है इस तथ्य के कारण है कि 'a.link' तत्व गतिशील रूप से जोड़ दिया गया है और किसी भी तरह से मुझे उस बाहरी घटना को संभालने से 'बाहरी' div को रोकने की आवश्यकता है - मैं इसे कैसे प्राप्त कर सकता हूं? तो मूल रूप से आपका मतलब है कि यह: $ (दस्तावेज़) .on ('माउसअप', 'a.link' ...) इसके बराबर है: $ ('a.link')। लाइव ('माउसअप', ...)? – MonkeyCoder
हां - एकमात्र तरीका '.live() ',' .delegate() ', या नया' .on() 'जैसे काम कर सकते हैं, बुलबुले के माध्यम से काम कर सकते हैं, और अंदरूनी से बुलबुले काम करता है। आप इसके बजाय यह सुनिश्चित कर सकते हैं कि गतिशील रूप से जोड़े गए तत्वों के लिए ईवेंट श्रोताओं को सीधे डीओएम में जोड़े जाने पर तत्वों के लिए बाध्य किया जाता है। – Pointy