2009-10-05 14 views
10

अगर मैं एक तत्व (html) एक और तत्व में नेस्ट और उन दोनों को, एक क्लिक के हैंडलर संलग्न आंतरिक तत्व पर क्लिक इसकी क्लिक हैंडलर कार्यान्वित किया है और उसके बाद माता-पिता के लिए ऊपर बुलबुले और उसके क्लिक हैंडलर निष्पादित करता है। इस तरह मैं इसे समझता हूं।घटना प्रचार

यदि घटनाएं संलग्न नहीं होती हैं तो क्या घटनाएं होती हैं और यदि ऐसा है, तो क्या यह रोकने के लिए प्रत्येक हैंडलर के अंत में एक घटना.स्टॉपप्रॉपैगेशन() को रोकने और चीजों को गति देने के लिए घटनाएं डालने के लायक हैं?

उत्तर

16

घटनाओं लगभग हमेशा बबल सामने जब तक event.cancelBubble = true सेट कर दिया जाता या event.stopPropagation() किया जाता है। आप केवल इसके बारे में जानते हैं, हालांकि, जब आपकी कोई घटना हैंडलर फिसल जाती है।

किसी घटना के समय बुलबुला की सूची के लिए http://en.wikipedia.org/wiki/DOM_events देखें। (नोट: एचटीएमएल घटनाओं की तालिका में, रद्द करने event.preventDefault (की प्रभावशीलता को दर्शाता है) या डिफ़ॉल्ट कार्रवाई रद्द करने के लिए रिटर्न फाल्स, बुदबुदाती नहीं)

इसके अलावा http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow देखते हैं, विशेष रूप से 1.2.1 मूल प्रवाह में समझने के लिए इवेंट प्रचार के कैप्चर चरण और बबलिंग चरण।

संपादित

http://mark-story.com/posts/view/speed-up-javascript-event-handling-with-event-delegation-and-bubbling पता चलता है वहाँ है प्रचार को रोकने के एक प्रदर्शन लाभ लेकिन कोई डेटा प्रदान करता है।

http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/a9af0aa4216a8046 पता चलता है कि ब्राउज़रों उत्साह से भरा हुआ व्यवहार के लिए अनुकूलित किया जाना चाहिए और कहता है कोई महत्वपूर्ण प्रदर्शन अंतर नहीं होना चाहिए। फिर कोई डेटा नहीं।

http://developer.yahoo.com/performance/rules.html#events ईवेंट-हैंडलिंग प्रदर्शन में सुधार के लिए एक अच्छी तकनीक प्रदान करता है, लेकिन स्टॉपप्रॉपैगेशन प्रदर्शन के बारे में सीधे बात नहीं करता है।

अंत में, आप अंतर प्रोफ़ाइल अपनी साइट पर लाभ का एक अच्छा विचार प्राप्त करने के लिए होगा।

+0

धन्यवाद जोनाथन। क्या आपको पता है कि हर समय प्रसार को रोककर कोई प्रदर्शन लाभ होता है? –

+0

ऐसा नहीं है कि मुझे पता है। आम तौर पर बुलबुला अपेक्षित व्यवहार है, और इस तरह मुझे संदेह होगा कि ब्राउजर उस व्यवहार के लिए अनुकूलित किए जाएंगे। मैं देखूंगा कि मैं क्या खोद सकता हूं। –

+0

आपकी लंबी पोस्ट जोनाथन के लिए धन्यवाद। मैं आपके सुझाए गए लिंक पर कुछ और खुदाई करूँगा। एक बार फिर धन्यवाद। –

1

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

इसके अलावा, आप याद अपने कोड पठनीय और आत्म समझाने के योग्य रहना चाहिए चाहिए। stopPropagation() एक उद्देश्य है जो किसी उद्देश्य के लिए उपयोग किया जाता है, इसलिए प्रत्येक विधि में इसका उपयोग वास्तव में भ्रमित हो सकता है।

+0

हर विधि में इसका उपयोग करना कुछ ऐसा है जो मैं बचाना चाहता था इसलिए पूरी तरह से सहमत हूं। जटिल घोंसला वाले डोम के लिए, दुर्भाग्यवश मेरे पास एक जटिल संरचना है जो घटक कला नियंत्रण के लिए धन्यवाद नहीं है कि पागल जैसे तालिकाओं के भीतर घोंसले टेबल। मुझे स्क्रीन पर 100 रिकॉर्ड दिखाते हुए एक 2.5 सेकंड देरी का सामना करना पड़ रहा है। मैंने उस समय से डेटा को ब्राउज़र पर भेजा था। और यह संभवतः जिस तरह से यह हर एक टीडी और टीआर के लिए अपनी घटनाओं को तारों के कारण तारों के कारण। घटना प्रतिनिधिमंडल में देखेंगे। अपने समय के लिए फिर से धन्यवाद। –

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