2011-04-28 75 views
7

我不知道我在做什麼錯,但這裏是我正在做的一個例子,它似乎並沒有工作。removeEventListener不起作用

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

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

的removeEventListener代碼被執行,但它只是不刪除「鼠標移動」聽者

回答

5

onInputMove是不是一個事件 - 回調方法。所以,你需要做的是這樣的:

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

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

removeEventListener的第三個參數也是強制性的,所以你的實例應該是:'someDom.removeEventListener('mousemove',event,false);' – meouw 2011-04-28 22:28:16

+1

@meouw Yup,也進行了更新。謝謝。 – cem 2011-04-29 00:17:51

+4

'事件'不是你的eventhandler函數的一個好名字參考 – UpTheCreek 2012-11-29 11:57:04

24

removeEventListener刪除偵聽器正是添加的功能相匹配。

在這種情況下,addEventListener添加的功能是:

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

商店的實際功能的引用,你會好。因此,例如,下面應該工作:

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

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

removeEventListener的第三個參數也是必須的,所以你的實例應該是:'someDom.removeEventListener('mousemove',self.onInputMove,false);' – meouw 2011-04-28 22:29:11

+0

@meouw - 更新以解決該問題;謝謝! – 2011-04-28 22:38:20

+1

我知道我晚了幾年,但第三個參數實際上並不是強制的嗎?我認爲它應該是可選的,它應該默認爲false。 – 2016-12-02 18:13:56

1

爲什麼不自己做起來很辛苦,只是使用下面的一個事件綁定到一個元素:

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

現在,當你要刪除的事件,只是這樣做:

element.onmousemove = null; 

完成!

希望這可以幫助你們出去!

+0

這應該被標記爲答案。祝你好樣的先生。你剛剛救了我。 – thandasoru 2013-02-26 03:30:23

+8

@thandasoru如果您使用的是事件偵聽器,則不需要。 – Sir 2013-11-04 01:59:48

+1

因爲這使用舊的事件處理程序作爲屬性範例,而不是DOM Level 2事件標準。而且,因爲這種技術不允許多個處理程序來處理單個事件。 – 2016-03-11 19:29:13

1

本頁面首先在Google上搜索此問題。因此,除了已經提到的答案之外,這裏還有一個對未來有趣的事實:

將addCaptureListener()中的第三個可選變量留給useCapture/useBubble(因爲它默認爲false)會在刪除相同的eventlistener時產生一些問題具有相同的回調名稱。在使用chrome時我遇到了這個問題。不能說其他瀏覽器。

所以請明確提到第三個變量爲「false」。