2013-09-30 46 views
0

添加監聽removeEventListener不工作

for (i = 0; i < kbButtons.length; i++) { 
     kbButtons[i].addEventListener("click", function() { clickKbButton(this); }, false); 
    } 

應該刪除監聽

function clickKbButton (elem) { 
    elem.removeEventListener("click", function() { clickKbButton(this); }, false); 
    elem.id = "invis" 
    } 

一切都在控制檯,點擊按鈕的作品做工精細,沒有錯誤,但它沒有被刪除後,我點擊它

+0

爲什麼你改變你刪除它之後元素的ID? – trysis

+0

@trysis只是視覺,使文字消失 – y0ruba

回答

4

documentation,我的猜測是,事件處理程序應該是同一個功能:

for (i = 0; i < kbButtons.length; i++) { 
    kbButtons[i].addEventListener("click", clickKbButton, false); 
} 
function clickKbButton (ev) { 
    this.removeEventListener("click", clickKbButton, false); 
    this.id = "invis" 
} 

Simple fiddle example

+0

是的工作。 – y0ruba

+0

你說得對。 'removeEventListener'必須被傳遞給被添加的函數的引用,而不是副本。 –

2

我想你應該使用一個變量引用function() { clickKbButton(this); },你的addEventListener & removeEventListener這兩個函數實際上是兩個不同的函數。

var handler = function() { clickKbButton(this) }; 

然後在添加&刪除偵聽器時使用此處理程序變量。

相關問題