शब्दावली
से quirksmode.org :
इवेंट कैप्चरिंग
जब आप ईवेंट कैप्चरिंग का उपयोग करते हैं
| |
--------------- | | -----------------
| तत्व 1 | | |
| ----------- | | ----------- |
| | एलिमेंट 2 \ / | |
| ------------------------- - |
| इवेंट कैप्चरिंग |
-----------------------------------
एलिमेंट 1 का ईवेंट हैंडलर पहले फायर करता है, एलिमेंट 2 का ईवेंट हैंडलर आखिरी बार फायर करता है।
घटना बुदबुदाई
जब आप इवेंट बबलिंग का उपयोग करते हैं
/ \ _
--------------- | | -----------------
| तत्व 1 | | |
| ----------- | | ----------- |
| | तत्व २ | | | |
| ------------------------- - |
| इवेंट बबलिंग |
-----------------------------------
एलिमेंट 2 का ईवेंट हैंडलर पहले फायर करता है, एलिमेंट 1 का ईवेंट हैंडलर आखिरी बार फायर करता है।
W3C ईवेंट मॉडल में होने वाली किसी भी घटना को पहले तब तक कैप्चर किया जाता है जब तक कि वह टार्गेट एलिमेंट तक नहीं पहुंच जाती और फिर से बुलबुले बन जाती है ।
| | / \ _
----------------- | | - | | -----------------
| तत्व 1 | | | | |
| ------------- | | - | | ----------- |
| | एलिमेंट 2 \ / | | | |
| -------------------------------- |
| W3C इवेंट मॉडल |
------------------------------------------
इंटरफेस
इवेंट कैप्चर के लिए w3.org से :
यदि कैप्चरिंग EventListenerईवेंट के आगे के प्रसंस्करण को रोकने की इच्छा रखता है, तो यह इंटरफ़ेस की stopPropagationविधि
कह सकता Eventहै। यह घटना के आगे प्रेषण को रोक देगा, हालांकि EventListenersसमान पदानुक्रम स्तर पर पंजीकृत अतिरिक्त अभी भी घटना को प्राप्त करेगा। एक बार किसी घटना के stopPropagation
तरीके को कॉल करने के बाद, उस विधि पर आगे कॉल का कोई अतिरिक्त प्रभाव नहीं होता है। यदि कोई अतिरिक्त कैप्चरर्स मौजूद stopPropagationनहीं है और
उसे नहीं बुलाया गया है, तो ईवेंट EventListenersलक्ष्य पर ही उपयुक्त हो जाता है।
के लिए घटना उत्साह से भरा हुआ :
कोई भी ईवेंट हैंडलर इंटरफ़ेस की stopPropagationविधि को कॉल करके आगे के प्रसार को रोकने के लिए चुन सकता Eventहै। यदि कोई
EventListenerइस विधि को कॉल करता है, EventListenersतो चालू पर अतिरिक्त सभी चालू EventTargetहो जाएगा लेकिन बुदबुदाती उस स्तर पर समाप्त हो जाएगी। stopPropagationआगे बुदबुदाहट को रोकने के लिए केवल एक कॉल की आवश्यकता है।
के लिए घटना निरस्तीकरण :
निरस्तीकरण को फोन करके पूरा किया है Eventकी preventDefault
विधि। यदि किसी भी चरण के दौरान एक या अधिक EventListenersकॉल preventDefaultप्रवाहित होती हैं तो डिफ़ॉल्ट क्रिया रद्द कर दी जाएगी।
उदाहरण
निम्नलिखित उदाहरणों में, वेब ब्राउज़र में हाइपरलिंक पर एक क्लिक से ईवेंट का प्रवाह (ईवेंट श्रोताओं को निष्पादित किया जाता है) और इवेंट टारगेट की डिफ़ॉल्ट क्रिया (एक नया टैब खोला जाता है) चालू हो जाता है।
HTML:
<div id="a">
<a id="b" href="http://www.google.com/" target="_blank">Google</a>
</div>
<p id="c"></p>
जावास्क्रिप्ट:
var el = document.getElementById("c");
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
}
function capturingOnClick2(ev) {
el.innerHTML += "A event capture<br>";
}
function bubblingOnClick1(ev) {
el.innerHTML += "DIV event bubbling<br>";
}
function bubblingOnClick2(ev) {
el.innerHTML += "A event bubbling<br>";
}
// The 3rd parameter useCapture makes the event listener capturing (false by default)
document.getElementById("a").addEventListener("click", capturingOnClick1, true);
document.getElementById("b").addEventListener("click", capturingOnClick2, true);
document.getElementById("a").addEventListener("click", bubblingOnClick1, false);
document.getElementById("b").addEventListener("click", bubblingOnClick2, false);
उदाहरण 1 : इसका परिणाम आउटपुट है
DIV event capture
A event capture
A event bubbling
DIV event bubbling
उदाहरण 2 : stopPropagation()फ़ंक्शन में जोड़ना
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
ev.stopPropagation();
}
परिणाम में परिणाम
DIV event capture
ईवेंट श्रोता ने इस घटना के आगे और नीचे के प्रसार को रोक दिया। हालाँकि यह डिफ़ॉल्ट क्रिया (नया टैब खोलने) को नहीं रोकता था।
उदाहरण 3 : stopPropagation()फ़ंक्शन में जोड़ना
function capturingOnClick2(ev) {
el.innerHTML += "A event capture<br>";
ev.stopPropagation();
}
या समारोह
function bubblingOnClick2(ev) {
el.innerHTML += "A event bubbling<br>";
ev.stopPropagation();
}
परिणाम में परिणाम
DIV event capture
A event capture
A event bubbling
ऐसा इसलिए है क्योंकि दोनों ईवेंट श्रोता एक ही ईवेंट लक्ष्य पर पंजीकृत हैं। इवेंट श्रोताओं ने इवेंट के आगे के प्रसार को रोक दिया। हालांकि उन्होंने डिफ़ॉल्ट कार्रवाई (एक नया टैब खोलने) को नहीं रोका।
उदाहरण 4 : उदाहरण केpreventDefault() लिए, किसी भी फ़ंक्शन को जोड़ना
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
ev.preventDefault();
}
नए टैब को खोलने से रोकता है।
event.stopकार्य में करते हैं ... इसके अलावा अजीब है कि मुझे कभी भी परेशानी नहीं हुई। मैं बुदबुदाहट का उपयोग करता हूं। उदाहरण के लिए धन्यवाद!