2014-06-17 89 views
0

我有一個問題,試圖刪除一個css transistionend事件偵聽器。我能夠與添加監聽器:刪除CSS transitionend事件偵聽器不工作

e.addEventListener('transitionend',function(event) { 
    transitionComplete(event.propertyName); 
},false); 

我試圖用

e.removeEventListener('transitionend',function(event) { 
    transitionComplete(event.propertyName); 
},false); 

無論身在何處,我把聽不會被刪除removeEventListener刪除它。我能做什麼錯了?

我不使用jquery這個。

回答

6

不要使用匿名函數,而是命名函數並將刪除放入事件處理程序中。

var func = function(event) { 
    transitionComplete(event.propertyName); 
    e.removeEventListener('transitionend',func); 
}; 

e.addEventListener('transitionend',func, false); 
+0

那麼這工作的感謝!只需要研究爲什麼,所以我知道將來的參考。 ;-) –

+0

在你的原代碼中,你試圖從處理程序中刪除的函數是一個新的匿名函數,恰好相當於你添加的匿名函數,但它實際上並不是相同的函數(即相同參考),所以你最初添加的功能停留在處理程序上。在這段代碼中,func指向相同的參考。我希望這是有道理的,在其他地方可能會有更好的解釋! – Eterm

+0

這工作,但我不明白。在'removeEventListener'上你調用了包含它的'func'。你在自稱。你能解釋這些嗎? –