2010-04-18 14 views
18

मैं सामान्य आम सहमति प्राप्त करना चाहता था जिस पर जेएस में बुलबुले और कैप्चरिंग के बीच इवेंट प्रतिनिधिमंडल का बेहतर तरीका है।इवेंट कैप्चरिंग बनाम इवेंट बबलिंग

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

या इसे दूसरे शब्दों में डालने के लिए, डब्लू 3 सी एडवेन्ट लिस्टनर कार्यान्वयन के पीछे बबलिंग मोड के पक्ष में एक कारण है। [कैप्चरिंग केवल तभी शुरू की जाती है जब आप 3 पैरामीटर और उसके सत्य को निर्दिष्ट करते हैं। हालांकि, आपको लगता है कि 3 परम और बुदबुदाती मोड में लात मारी है]

मैं JQuery के बाँध समारोह देखा मेरे सवाल का जवाब पाने के लिए भूल सकता है और यह भी कब्जा चरण में होने वाली घटनाओं का समर्थन नहीं करता लगता है (यह लगता है मैं आईई की वजह से कैप्चरिंग मोड का समर्थन नहीं करता)।

तो ऐसा लगता है कि बबलिंग मोड डिफ़ॉल्ट विकल्प है लेकिन क्यों?

+0

संभावित डुप्लिकेट [घटना बबलिंग और कैप्चरिंग क्या है?] (Https://stackoverflow.com/questions/4616694/what-is-event-bubbling-and-capturing) –

उत्तर

10

अतीत में यह एक प्लेटफॉर्म मुद्दा था, इंटरनेट एक्सप्लोरर के पास एक बुलबुला मॉडल था, और नेटस्केप कैप्चरिंग के बारे में अधिक था (अभी तक दोनों का समर्थन किया गया था)।

डब्ल्यू 3 सी मॉडल कॉल करता है कि आप कौन सी चाहें चुनने में सक्षम होंगे। कुछ प्लेटफॉर्म है कि केवल बुदबुदाती ... और यह एक तरह से एक "डिफ़ॉल्ट" मोड के रूप में समझ में आता है का समर्थन कर रहे हैं क्योंकि, के रूप में कहा गया है

मैं बुदबुदाती लगता अधिक लोकप्रिय है।

जो भी आप चुनते हैं वह काफी हद तक एक उत्पाद है जो आप कर रहे हैं और आपको क्या समझ में आता है।

+3

, बुलबुले डिफ़ॉल्ट विकल्प प्रतीत होता है। यहाँ क्या मैं prototype.js वेबसाइट पर पाया "1.6 प्रोटोटाइप करने से पहले, Event.observe एक चौथा तर्क (useCapture), एक बूलियन कि संकेत दिया है कि क्या ब्राउज़र की कैप्चरिंग चरण या उसके उत्साह से भरा हुआ चरण उपयोग करने के लिए। समर्थित MSIE के बाद से है कैप्चरिंग चरण का समर्थन नहीं करता है, हमने 1.6 से इस तर्क को हटा दिया है, न कि यह उपयोगकर्ताओं को झूठी छाप देता है कि वे सभी ब्राउज़रों में कैप्चरिंग चरण का उपयोग कर सकते हैं। " [http://api.prototypejs.org/dom/event/observe/] – Rajat

-1

मुझे यकीन नहीं है लेकिन मुझे पूरा यकीन है कि आप जो कुछ भी कर सकते हैं उसके साथ आप कैप्चरिंग और इसके विपरीत कर सकते हैं।

यह विचार है कि आपके पास कुछ घटनाएं बुलबुले होंगी और एक ही ऐप में कुछ कैप्चरिंग चीजों को बहुत भ्रमित करने के लिए एक अच्छा तरीका लगता है। मैं जो कह रहा हूं वह है, मुझे लगता है कि बुलबुले बनाम वास्तव में मायने रखता है। क्या मायने रखता है कि आप एक चुनते हैं और इसके साथ चिपके रहते हैं।

डब्ल्यू 3 सी के एपीआई में अक्सर इस तरह की चीज होती है जहां उनके पास बहुत सारी सुविधाएं होती हैं जिन्हें कोई भी वास्तव में परवाह नहीं करता है। शायद यह एक और उदाहरण है कि कितने अच्छे डिफ़ॉल्ट कॉन्फ़िगरेशन या यहां तक ​​कि पूरी सुविधाओं की आवश्यकता को हटा सकते हैं।

+3

फोकस/ब्लर इवेंट्स बबल नहीं करते हैं, लेकिन कैप्चर चरण के दौरान उच्च स्तर पर प्रतिनिधिमंडल किया जा सकता है - http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html –

+1

दूसरे शब्दों में, बुलबुला फोकस/धुंध के साथ काम नहीं करता है, लेकिन कैप्चर करता है यह आईई-केवल फोकसिन/फोकसआउट के व्यवहार को अनुकरण करने के लिए उपयोगी है। बुलबुले और कैप्चर के बीच अन्य अंतर केवल तब आते हैं जब आप किसी ईवेंट को पकड़ना चाहते हैं और इसे बुलबुले आदि से रोकना चाहते हैं। – thomasrutter

+1

कैप्चरिंग भी उपयोगी है यदि आप बबलिंग चरण में हैंडलर से गुजरना चाहते हैं। – sandstrom

1

This test सुझाव देता है कि बुलबुले पर कब्जा करने के लिए थोड़ा सा प्रदर्शन लाभ होता है। जैसे ही इसे संभाला जाता है, घटना को मारने के बावजूद, हालांकि जब यह छोड़ा गया तो यह मामूली था। मुझे लगता है कि एक जटिल डोम दोनों के बीच प्रदर्शन अंतर अतिरंजित करेगा।

7

जावास्क्रिप्ट पढ़ने के दौरान: परिभाषा गाइड, 5 वां संस्करण, मैं पृष्ठ 422 पर उदाहरण 17-4 में आया जो पूरी तरह से स्थित तत्वों को खींचने के लिए एक फ़ंक्शन को परिभाषित करता है। उदाहरण में, drag() फ़ंक्शन onmousedown दस्तावेज़ तत्व की विशेषता में कहा जाता है। फ़ंक्शन माउस के स्थान में परिवर्तन के आधार पर तत्व को दोहराता है जिसे कैप्चर किए गए मूसमोव और माउसअप ईवेंट के लिए रूट दस्तावेज़ तत्व में जोड़े गए हैंडलर द्वारा पूछताछ की जाती है। वे निम्न कारणों से दस्तावेज़ पर इन घटनाओं पर कब्जा:

यह ध्यान रखें कि MouseMove और mouseup संचालकों ईवेंट हैंडलर्स पर कब्जा रूप में पंजीकृत हैं उपयोगकर्ता तेजी से दस्तावेज़ तत्व से माउस ले जाते हैं इसका अनुसरण कर सकता है, क्योंकि महत्वपूर्ण है , और इनमें से कुछ घटनाएं मूल लक्ष्य तत्व के बाहर होती हैं।

यह घटनाओं को कैप्चर करते समय त्वरित प्रतिक्रिया में एक लाभ का सुझाव देता है।

+3

मुझे लगता है कि वे बुलबुले चरण में बंधे घटनाओं के सामने पहुंचने के लिए कैप्चर का उपयोग कर रहे हैं, और किसी भी प्रदर्शन लाभ के कारण जरूरी नहीं है। – Joel

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