2011-01-19 13 views
14

object.stopPropagation() के साथ मैं ईवेंट बुलबुला रोक सकता हूं लेकिन मैं इसे फिर से सक्षम कैसे कर सकता हूं?जावास्क्रिप्ट: स्टॉपप्रॉपैगेशन कैसे सक्षम करें?

क्या object.startPropagation जैसे कुछ में पूर्व परिभाषित फ़ंक्शन है?

संपादित करें:

समस्या है कि जे एस यदि आप "वस्तु" से रोक घटना बुदबुदाती हमेशा के बाद भी मैं इसे नहीं करना चाहती पर क्लिक करें, तो मैं इसे रोकने के लिए चाहते हैं याद करते है:

document.getElementById("object").onclick = function(e){ 
    if(e && e.stopPropagation) { 
     e.stopPropagation(); 
    } else { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 
+0

क्या आप कुछ और जानकारी जोड़ सकते हैं, यानी आप क्या हासिल करने की कोशिश कर रहे हैं। अगर आपको स्टॉप कहा जाता है तो मुझे इसे शुरू करने की ज़रूरत नहीं है। – GenericTypeTea

+0

मैंने प्रश्न @GenericTypeTea – Adam

+0

संपादित किया जब आप कहते हैं "यहां तक ​​कि मुझे यह नहीं चाहिए", आप किन परिस्थितियों में यह नहीं चाहते हैं? आपको उन परिस्थितियों का प्रतिनिधित्व करने के लिए कुछ चर सेट अप करने की आवश्यकता है, फिर हैंडलर में उस चर को जांचें। यदि आप वास्तव में एक और समाधान चुनने के बजाय अपना कोड पोस्ट करते हैं तो यह सहायक होगा। – Kelvin

उत्तर

25

यह मूल्य बिल्कुल याद नहीं है। घटना e प्रत्येक बार onclick निकाल दी जाती है। समस्या आप हमेशा घटना बुदबुदाती रद्द कर रहे है:

if(foo) { 
    e.stopPropagation(); 
} else { 
    e.cancelBubble = true; 
} 
  • e.stopPropagation घटना बुदबुदाती को रोकने का W3C विधि है।
  • e.cancelBubble घटना बुलबुले को रोकने के लिए Microsoft विधि है।

वे दोनों एक जैसे हैं। तो आप हर बार घटनाओं के बुलबुले को रद्द कर रहे हैं। here और पढ़ें।

आप इतना है कि यह केवल यदि आपके मानदंड पूरा बुदबुदाती रद्द अपनी पद्धति को बदलना होगा:

document.getElementById("object").onclick = function(e) { 

    if(e && e.stopPropagation && someCriteriaToStopBubbling === true) 
    { 
     e.stopPropagation(); 
    } 
    else if (someCriteriaToStopBubbling === true) 
    { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 

अद्यतन: याद रखिए कि अपने वर्तमान कोड में, if (e && e.stopPropagation) हमेशा सच हो जाएगा यदि ब्राउज़र stopPropagation का समर्थन करता है। यदि यह cancelBubble के लिए दूसरी ब्रेस में जाता है, तो यह अंतिम सेट मान को याद नहीं रखेगा। this fiddle देखें।

मूल रूप से, संक्षेप में, अपने कोड में आप प्रत्येक क्लिक के बाद हर बार प्रसार रद्द कर रहे हैं। तत्व पदानुक्रम को प्रसारित करना रद्द करना है या नहीं, यह निर्धारित करने के लिए आपको फ़ंक्शन में कुछ मानदंड रखना होगा।

+0

मैंने इसका परीक्षण किया और याद किया, घटना बबल रद्द करना एक समारोह के अंदर है जिसे किसी अन्य घटना द्वारा निकाल दिया जाता है। और जब मैं दूसरी ऑब्जेक्ट पर क्लिक करता हूं तो इवेंट बबलिंग अभी भी रद्द हो जाती है और मैंने फ़ंक्शन के अंदर एक चेतावनी भी दी है और काम करता है क्योंकि यह याद करता है कि यदि आप फ़ंक्शन शुरू करने से "ऑब्जेक्ट" पर क्लिक करते हैं, लेकिन मैंने पैरेंट शुरू नहीं किया घटना बुलबुले समारोह का कार्य, शायद मुझे कुछ समझ में नहीं आ रहा है लेकिन यह वही है जो मैं अनुभव करता हूं :)। लेकिन आपका समाधान सही है, मैं कुछ IF ELSE कथन रख सकता हूं और मुझे उम्मीद है कि यह काम करेगा :) – Adam

+0

@CIRK - आप कुछ गलत कर रहे हैं, क्योंकि यह ** ** याद नहीं करता है, जब तक कि आप कुछ कोड नहीं कर रहे हों जो आपने प्रदान किया है उसके लिए। यहां देखें: http://jsfiddle.net/DgwSA/। हर बार जब आप उस उदाहरण में बटन पर क्लिक करते हैं तो रद्द करें हमेशा बबल होगा। मैंने आपकी गलतियों को और अधिक स्पष्ट करने के लिए एक अपडेट जोड़ा है। – GenericTypeTea

+0

इसे देखें -> http://jsfiddle.net/DgwSA/1/ ऑनक्लिक बदल दिया गया है और रद्द बबल भी है, हालांकि अगर आप चेतावनी देते हैं तो e.cancelbubble आपको झूठा देगा, लेकिन मेरे प्रोजेक्ट में इवेंट हैंडलिंग भी बंद कर दिया। – Adam

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