2011-04-28 11 views
7

मुझे नहीं पता कि मैं क्या गलत कर रहा हूं लेकिन यहां एक उदाहरण है जो मैं कर रहा हूं और ऐसा लगता है कि यह काम नहीं कर रहा है।removeEventListener काम नहीं कर रहा है

someDom.addEventListener('mousemove',function(ev) {self.onInputMove(ev)},false); 

someDom.removeEventListener('mousemove',self.onInputMove); 

removeEventListener कोड निष्पादित किया जाता, लेकिन यह सिर्फ 'MouseMove' श्रोता

उत्तर

5

onInputMove को दूर नहीं करता एक घटना-कॉलबैक विधि नहीं है। तो अगर आप की तरह कुछ करने की जरूरत है:

var event = function(ev) {self.onInputMove(ev)}; 
someDom.addEventListener('mousemove', event,false); 

someDom.removeEventListener('mousemove', event, false); 
+0

हटाने के लिए तीसरा तर्क EventListener भी अनिवार्य है, इसलिए आपका उदाहरण होना चाहिए: 'someDom.removeEventListener (' mousemove ', event, false); ' – meouw

+1

@meouw Yup, भी अपडेट किया गया। धन्यवाद। – cem

+4

'event' आपके ईवेंटहैंडर फ़ंक्शन संदर्भ – UpTheCreek

24

removeEventListener कि बिल्कुल समारोह है कि जोड़ा गया है से मेल खाता है श्रोता निकाल देता है।

इस मामले में, समारोह है कि addEventListener जोड़ा था:

var some_func = function(ev) { 
    self.onInputMove(ev); 
}; 

स्टोर वास्तविक समारोह के लिए एक संदर्भ है और आप अच्छा हो जाएगा। उदाहरण के लिए, निम्नलिखित काम करना चाहिए:

someDom.addEventListener('mousemove',self.onInputMove,false); 

someDom.removeEventListener('mousemove',self.onInputMove,false); 
+4

के लिए एक अच्छा नाम नहीं है IventListener को हटाने का तीसरा तर्क भी अनिवार्य है, इसलिए आपका उदाहरण होना चाहिए:' someDom.removeEventListener ('mousemove', self.onInputMove, false); ' – meouw

+0

@meouw - उस समस्या को ठीक करने के लिए अद्यतन किया गया; धन्यवाद! –

+1

मुझे पता है कि मैं कई सालों से देर हो चुकी हूं, लेकिन तीसरा तर्क वास्तव में अनिवार्य नहीं है? मुझे लगता है कि यह वैकल्पिक होना चाहिए, और यह गलत होने के लिए डिफ़ॉल्ट होना चाहिए। –

1

क्यों यह अपने आप इतनी मेहनत करते हैं, सिर्फ एक तत्व के लिए एक घटना बाध्य करने के लिए निम्नलिखित का उपयोग करें: जब आप निकालना चाहते हैं, अब

element.onmousemove = function(e) { 
    // Some code here... 
    alert("Mouse moved!"); 
}; 

घटना, बस यह करें:

element.onmousemove = null; 

हो गया!

आशा है कि यह आपको लोगों की मदद करेगा!

+0

इसे उत्तर के रूप में चिह्नित किया जाना चाहिए था। शुभ दिन आप श्रीमान सर। तुमने मुझे बचा लिया – thandasoru

+8

@ थंडसोरू अगर आप ईवेंट श्रोताओं का उपयोग नहीं कर रहे हैं। – Sir

+1

क्योंकि यह पुराने ईवेंट हैंडलर को गुण पैराडाइम के रूप में उपयोग करता है, डीओएम स्तर 2 इवेंट मानक के बजाए। और, क्योंकि यह तकनीक एकाधिक हैंडलर को एक ईवेंट में अनुमति नहीं देती है। –

1

यह पृष्ठ Google पर इस तरह के/इस मुद्दे को खोजने पर सबसे पहले आता है। तो पहले से ही दिए गए उत्तरों के अलावा, भविष्य के लिए यहां एक और दिलचस्प तथ्य है:

उपयोग के लिए addEventListener() में तीसरे वैकल्पिक चर को छोड़कर कैप्चर/उपयोगबबल (जैसा कि यह गलत पर डिफ़ॉल्ट है) उसी ईवेंटलिस्ट को हटाते समय कुछ समस्या उत्पन्न करता है उसी कॉलबैक नाम के साथ। क्रोम पर काम करते समय मुझे इस मुद्दे का सामना करना पड़ा। अन्य ब्राउज़रों के बारे में कहें।

तो तीसरे चर को स्पष्ट रूप से "झूठी" के रूप में वर्णित करें।