दिलचस्प पोस्ट
एंड्रॉइड पर केवल फाइल सिस्टम पढ़ें ग्राफ़ नोड्स का मूल्यांकन निर्देशांक क्या केवल जावास्क्रिप्ट का उपयोग करने के लिए डेटा लिखना संभव है? जावा में परमाणु संदर्भ का उपयोग कब करना है? क्यूटी लिंकर त्रुटि: "vtable के लिए अपरिभाषित संदर्भ" कैसे सिद्धांत के साथ बेतरतीब चयन करने के लिए एक्लिप्स में शामिल बाहरी पुस्तकालयों के साथ एक जार कैसे बनाएं? SerialPort कोई डेटा प्राप्त नहीं कर रहा है काउंटडाउनलाच बनाम सेमाफोर गिट ने असंबंधित इतिहास को मर्ज करने से इंकार कर दिया मैं क्रमिक क्रम में वादे के सरंक्षण को कैसे निष्पादित कर सकता हूं? सरल सूची आइटम का टेक्स्ट रंग कैसे बदलना है क्या कोई मुफ्त एक्सएमएल डिफ / मर्ज टूल्स उपलब्ध है? jQuery: फ़ंक्शन को बच्चों को छोड़ दें क्लिक करें दो तिथियों के बीच डेटाफ़्रेम पंक्तियां चुनें

ऑडियो और वीडियो इवेंट बबल क्यों नहीं करते?

मैं सोच रहा था कि मेरा कुछ जावास्क्रिप्ट तब तक काम नहीं करेगा जब तक कि मुझे लगा कि ऑडियो इवेंट ने DOM पेड़ को बुलबुला नहीं किया, जैसे timeupdate -इवेंट।

ऑडियो- और वीडियो-टैग बबल की घटनाओं को बताने के लिए कोई तर्क है?

वेब के समाधान से एकत्रित समाधान "ऑडियो और वीडियो इवेंट बबल क्यों नहीं करते?"

कारण घटना बुदबुदाहट मौजूद है, इस विवादास्पद प्रश्न को हल करना है कि किस तत्व को घटना के लक्ष्य का लक्ष्य है। इसलिए, यदि आप किसी div पर क्लिक करते हैं, तो क्या आप div, या उसके अभिभावक को क्लिक करने का मतलब था? यदि बच्चे में एक क्लिक हैंडलर संलग्न नहीं है, तो यह माता पिता की जांच करता है, और इसी तरह। मुझे यकीन है कि आप जानते हैं कि यह कैसे काम करता है

कारण है कि ऑडियो इवेंट बुलबुला नहीं करते क्योंकि वे किसी भी अन्य तत्व पर समझ नहीं पाते हैं। जब आप किसी ऑडियो तत्व पर timeupdate को ट्रिगर करते हैं, तो यह अस्पष्टता नहीं है कि यह ऑडियो तत्व के लिए ही है या उसके पैरेंट डिवा है, इसलिए इसे बबल करने की कोई आवश्यकता नहीं है।

आप यहां इवेंट बबुलिंग का एक फुलर इतिहास पढ़ सकते हैं

घटना प्रतिनिधिमंडल

घटना के कैप्चरिंग चरण का उपयोग करके घटना प्रतिनिधिमंडल अभी भी संभव है। AddEventListener के लिए तीसरे तर्क के रूप में सच कहें जो इस तरह दिखता है:

 document.addEventListener('play', function(e){ //e.target: audio/video element }, true); 

ध्यान दें, कि यह इवेंट बुलबुला नहीं है, लेकिन stopPropagation वृक्ष नीचे जाता है और stopPropagation साथ रोका नहीं जा सकता।

यदि आप इसे jQuery के .on / .off विधियों (उदाहरण के लिए नाम स्थान और अन्य jQuery ईवेंट एक्सटेंशन के साथ) का उपयोग करना चाहते हैं तो निम्न फ़ंक्शन, वेबसाइम लाइब्रेरी का रूप ले लिया, उपयोगी हो जाना चाहिए:

 $.createEventCapturing = (function () { var special = $.event.special; return function (names) { if (!document.addEventListener) { return; } if (typeof names == 'string') { names = [names]; } $.each(names, function (i, name) { var handler = function (e) { e = $.event.fix(e); return $.event.dispatch.call(this, e); }; special[name] = special[name] || {}; if (special[name].setup || special[name].teardown) { return; } $.extend(special[name], { setup: function () { this.addEventListener(name, handler, true); }, teardown: function () { this.removeEventListener(name, handler, true); } }); }); }; })(); 

उपयोग:

 $.createEventCapturing(['play', 'pause']); $(document).on('play', function(e){ $('audio, video').not(e.target).each(function(){ this.pause(); }); });