2012-02-17 13 views
10

मैं अपने आवेदन में event.stopPropagation() का उपयोग कर रहा हूं। हालांकि, एक परिदृश्य दिखाई दिया है जहां मैं प्रचार जारी रखना चाहता हूं जैसे उपर्युक्त समारोह कभी नहीं बुलाया गया था। तो मैं सोच रहा हूँ; बंद होने के बाद प्रचार को फिर से शुरू करने का कोई तरीका है? एक कॉल को event.stopPropagation पर एक दर्जन अलग सशर्त बयान में स्थानांतरित करने के लिए बहुत कठिन होगा।jQuery में event.stopPropagation पूर्ववत कैसे करें?

+0

एमएमएमएम ... http: //stackoverflow.com/questions/4735006/javascript-how-to-enable-stoppropagation – elclanrs

+0

यदि ऐसी सुविधा थी, तो आपको यह तय करने के लिए एक दर्जन सशर्त बयान की आवश्यकता नहीं होगी कि आपको क्या करना चाहिए इसे बुलाओ? – Jon

+0

वे पहले से ही वहां हैं। 'Event.stopPropagation()' और (शायद ही कभी) को कॉल करने के लिए एक कॉल होगा hypothetical 'event.resumePropagation()'। यह – Hubro

उत्तर

14

एक बार प्रचार बंद कर दिया गया है, इसे फिर से शुरू नहीं किया जा सकता है। समाधान के लिए, आप क्या कर सकते एक चर सेट किया गया है, और उसके बाद ही तो इस वैरिएबल सच है रोक:

var stop = false; 
// do your logic here 
if(stop){ 
    event.stopPropagation(); 
} 
+3

मैंने इसके बारे में नहीं सोचा था। मेरे बैकअप समाधान की तुलना में यह क्लीनर है। यह इष्टतम होगा यदि आप अपना उत्तर संपादित कर सकते हैं और इस तथ्य को शामिल कर सकते हैं कि "एक बार प्रचार बंद कर दिया गया है, तो ** ** इसे फिर से शुरू नहीं किया जा सकता है" – Hubro

+0

बस इसे संपादित किया गया! – Schiavini

2

event.stopPropagation() अपनी स्थिति के अंदर कॉल करें। उदाहरण के लिए

$el.click(function(event) { 
    if (some_condition) { 
     event.stopPropagation() 
     // do stuff 
    } 
    else { 
     // do other stuff, without stopping propagation 
    } 
}); 

यह कठिन हो सकता है, लेकिन दुर्भाग्यवश स्टॉपप्रॉपैगेशन एक तरह से स्विच है। एक बार रुक गया, आप इसे उसी घटना के लिए वापस चालू नहीं कर सकते हैं।

+0

को छोड़कर सभी सशर्तों में 'event.stopPropagation()' को कॉल करने पर बेहतर होगा। यह "ए" स्थिति नहीं है। यह स्थितियों की ** ** बहुत ** है। खुद को उद्धृत करते हुए: "एक कॉल को ईवेंट में स्थानांतरित करने के लिए यह बहुत कठिन होगा। स्टॉपप्रोपैगेशन एक दर्जन अलग सशर्त बयान" – Hubro

+0

यह कठिन हो सकता है, लेकिन दुर्भाग्यवश 'स्टॉपप्रॉपैगेशन' एक तरह से स्विच है। एक बार रुक गया, आप इसे उसी घटना के लिए वापस चालू नहीं कर सकते हैं। –

+0

अब ** वह ** वह उत्तर है जिसे मैं ढूंढ रहा था। जैसा कि वास्तव में मेरे प्रश्न का उत्तर देता है, अगर आप – Hubro

2

बस इस तरह अपने मूल घटना refactor:

var refEvent = event.originalEvent; 
refEvent.cancelBubble = false; 
refEvent.defaultPrevented = false; 
refEvent.returnValue = true; 
refEvent.timeStamp = (new Date()).getTime(); 

if (event.target.dispatchEvent){ 
    event.target.dispatchEvent(refEvent); 
} else if (event.target.fireEvent) { 
    event.target.fireEvent(refEvent); 
} 
+4

क्या आप e.stopPropagation() के साथ बंद होने वाली घटना का एक उदाहरण उदाहरण प्रदान कर सकते हैं और फिर उपरोक्त आपके उदाहरण के साथ पुनरारंभ कर सकते हैं? मैं इसे काम नहीं कर सका, लेकिन यह सिद्धांत में सही दिखता है। – gfullam

0

यहाँ एक समाधान है कि काम करता है:

$('#mydiv').on('click.new', function(e){ 

    e.stopImmediatePropagation(); 

alert('this will happen only once'); 

$('#mydiv').unbind('click.new'); 

}); 

यह इस तथ्य घटना कस्टम नाम स्थान हो सकता है, और उसके अनुसार निकल कर सकते हैं का उपयोग करता है। यह e.stopPropagation के लिए भी काम करता है। उस मामले के लिए, यह उस कस्टम क्लिक ईवेंट से जुड़े कुछ भी पूर्ववत कर सकता है।

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