2012-09-25 14 views
6

मैं समझता हूं कि एक घटना में दो तरीके होते हैं - बुलबुला और कैप्चरिंग।इवेंट बबलिंग/कैप्चरिंग - यह कहां से शुरू/अंत होता है?

जब कोई ईवेंट बबल पर सेट होता है, तो क्या जावास्क्रिप्ट "दस्तावेज़" की जांच करता है?

जब कोई ईवेंट कैप्चर करने के लिए सेट होता है, तो जावास्क्रिप्ट हमेशा "दस्तावेज़" से शुरू होता है?

जावास्क्रिप्ट कैसे जानता है कि कहां रुकना/शुरू करना है?

अद्यतन:

चलो कहते हैं कि मैं अपने शरीर टैग में निम्न कोड करते हैं।

<div id='outer'> 
    <div id='inner'></div> 
</div> 

जब मैं बुलबुले के #inner को एक घटना निर्धारित करते हैं, जावास्क्रिप्ट दस्तावेज़ में जाँच करता है या यह #outer में बंद हो जाता है?

+2

quirksmode से बहुत जानकारीपूर्ण लेख: http://www.quirksmode.org/js/events_order.html – techfoobar

+1

@techfoobar// मैं वास्तव में उस लेख को पढ़ता हूं, लेकिन यह स्पष्ट नहीं है कि जावास्क्रिप्ट मूल तत्व पर दस्तावेज़ या स्टॉप पर जांच करता है। – Moon

+1

अगर यह बाहरी पर रुक गया, तो यह कैसे पता चलेगा कि दस्तावेज़ पर कोई ईवेंट श्रोताओं थे या कोई? –

उत्तर

2

घटना बुदबुदाती

जावास्क्रिप्ट सभी तरह के दस्तावेज करने के लिए जाँच करता है। यदि आप दस्तावेज़ पर श्रोता और आंतरिक पर श्रोता जोड़ते हैं, तो दोनों श्रोताओं को आग लगती है।

घटना पर कब्जा करने

जावास्क्रिप्ट दस्तावेज़ से शुरू होता है और सभी तरह से भीतरी करने के लिए नीचे चला जाता है। यदि आप दस्तावेज़ पर श्रोता और आंतरिक पर श्रोता जोड़ते हैं, तो दोनों श्रोताओं को आग लगती है।


मेरे निष्कर्ष

बाहर कर देता है कि ब्राउज़र स्मार्ट प्रसंस्करण किसी प्रकार का होता है इतना है कि यह

क) पूरे माता पिता पदानुक्रम के माध्यम से लूप की जरूरत नहीं है

और

बी) सभी घटनाओं के माध्यम से लूप नहीं करना है।


सबूत

एक) यह ब्राउज़र लेता है कुछ ही समय दोनों क्लिक ईवेंट को गति प्रदान करने के लिए जब भीतरी div क्लिक किया जाता है:

Fiddle

ख) यह ब्राउज़र कुछ ही समय के लिए ले जाता है दोनों क्लिक घटनाओं को ट्रिगर करें जब आंतरिक div पर क्लिक किया जाता है जब कई अन्य घटनाएं मौजूद होती हैं जो अन्य DOM तत्वों से जुड़ी होती हैं जो पैरेंट पदानुक्रम में नहीं होती हैं:

Fiddle

+0

इवेंट बबलिंग // भले ही दस्तावेज़ में कोई ईवेंट न हो? – Moon

+0

संपादित उत्तर ... –

1

आंशिक जवाब ..

1 - एक घटना बुलबुला पर सेट होने पर, जावास्क्रिप्ट जाँच करता है "दस्तावेज़" के लिए?

नहीं पदानुक्रम में तत्वों में से एक मैं जानता हूँ कि मैं कर रहा हूँ nitpicking W3C Document Object Model Events

से stopPropagation()

5

फोन करके उत्साह से भरा हुआ रोकने का फैसला, लेकिन यह जावास्क्रिप्ट है कि घटनाओं हैंडल नहीं है अगर आप वर्णन कर रहे हैं, यह डोम-इंजन (दस्तावेज़ ऑब्जेक्ट मॉडल) है। ब्राउजर में जावास्क्रिप्ट और डीओएम इंजन के बीच बाइंडिंग हैं ताकि घटनाओं को जावास्क्रिप्ट में प्रचारित किया जा सके, लेकिन यह जावास्क्रिप्ट तक ही सीमित नहीं है। उदाहरण के लिए एमएसआईई के पास बेसिक के लिए समर्थन है।

जब कोई ईवेंट बबल पर सेट होता है, तो क्या जावास्क्रिप्ट "दस्तावेज़" की जांच करता है?

1.2.3 "यह ऊपर की ओर प्रसार करने के लिए जारी रखने के लिए और दस्तावेज सहित जाएगा"

"कोई भी ईवेंट हैंडलर इवेंट इंटरफ़ेस के stopPropagation विधि को फोन करके आगे घटना प्रसार को रोकने के लिए चुन सकते हैं। किसी भी EventListener इस कॉल करता है विधि, वर्तमान EventTarget पर सभी अतिरिक्त EventListeners ट्रिगर किए जाएंगे लेकिन उत्साह से भरा हुआ उस स्तर पर संघर्ष करेंगे "

जब कोई ईवेंट कब्जा करने के लिए सेट कर दिया जाता, जावास्क्रिप्ट हमेशा करता है से शुरू होता है" दस्तावेज़ "?

1.2.2 "कैप्चर पेड़, आम तौर पर दस्तावेज़ के ऊपर से संचालित होता है,"

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