2013-02-26 27 views
7

मुझे आश्चर्य है कि मैं एक जोड़ने के बाद एक ईवेंट श्रोता को कैसे हटा सकता हूं, जिस तरह से आप jquery में चालू और बंद करते हैं?जावास्क्रिप्ट में इवेंट श्रोता को कैसे निकालें?

document.removeEventListener('touchstart'); 
document.addEventListener('touchstart', function (e) { 
    closePopupOnClick(e, popup); 
}); 

लेकिन यह वास्तव में ईवेंट श्रोता को हटा नहीं देता है। अगर मैं एक फ़ंक्शन में addEventListener कोड डालता हूं और उस फ़ंक्शन को removeEventListener में पास करता हूं तो यह बीसी काम नहीं करेगा, आप फ़ंक्शन में पैराम पास नहीं कर सकते हैं। क्या कोई जानता है कि इसे कैसे करना है?

+2

[जावास्क्रिप्ट: ईवेंट श्रोता हटाएं] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4402287/javascript-remove-event-listener) भी [जावास्क्रिप्ट: अज्ञात ईवेंट श्रोता को हटा रहा है] (http: // stackoverflow .com/प्रश्न/3106605/हटाने-एक-अज्ञात-घटना-श्रोता) – Ohgodwhy

+0

कोई प्रश्न पैराम के मुद्दे को संबोधित नहीं करता है। – Tanya

उत्तर

15

एक चर के रूप में श्रोता रखो और जब .removeEventListener

document.removeEventListener('touchstart', myListener); 

साथ दूर करने .addEventListener

var myListener = function (e) { 
    closePopupOnClick(e, popup); 
}; 
document.addEventListener('touchstart', myListener, true); 

के माध्यम से देते हैं तो यह फिर से पारित आप नहीं कठोर मोड में हैं, तो आप एक श्रोता को arguments.callee

के साथ स्वयं को हटा सकता है
document.addEventListener('touchstart', function (e) { 
    closePopupOnClick(e, popup); 
    document.removeEventListener('touchstart', arguments.callee); 
}, true); 

आप कठोर मोड में हैं, तो आप एक नामित समारोह अभिव्यक्ति उपयोग करने के लिए आप एक समारोह में ही

document.addEventListener('touchstart', function myListener(e) { 
    closePopupOnClick(e, popup); 
    document.removeEventListener('touchstart', myListener); 
}, true); 

दूर करने के लिए आप श्रोता में चर का उपयोग करना चाहते हैं चाहते हैं, तो है जो कुछ बदल सकता है (उदाहरण के लिए एक पाश), तो आप एक जनरेटर समारोह, उदाहरण के

function listenerGenerator(popup) { 
    return function (e) { 
     closePopupOnClick(e, popup); 
    }; 
} 

के लिए लिख सकते हैं अब आप listenerGenerator(popup) साथ श्रोता बना सकते हैं और यह गुंजाइश popup चर होगा। ध्यान दें कि यदि popupऑब्जेक्ट है, तो यह ByRef होगा और इसलिए यह अभी भी परिवर्तनों के अधीन हो सकता है।

+0

addEventListener में myListener फ़ंक्शन में कोई पास, ई और पॉपअप पैरा कैसे पास करता है? यही वह है जो मैं सबसे ज्यादा अटक गया हूं। पैरा है – Tanya

+0

'ई' और' पॉपअप 'कहां से आ रहे हैं? 'ई' _Event_ है? तो आपको _useCapture_ 'true' –

+0

सेट करने की आवश्यकता है AddEventListener फ़ंक्शन उस फ़ंक्शन के अंदर है जो पॉपअप पैरा को इसमें पारित कर देता है। तो यह बाहरी समारोह से आता है। ई घटना है। मैं userCapture कैसे सेट करूं? – Tanya

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