Javascript removeEventListener 不起作用
在此程式碼中,使用addEventListener() 方法將事件偵聽器新增至元素:
area.addEventListener('click',function(event) ...,true);
後來,在另一個函數中,嘗試使用removeEventListener()方法刪除事件監聽器:
area.removeEventListener('click',function(event) ...,true);
但是,事件監聽器沒有被刪除。為什麼會發生這種情況?
問題:
問題在於作為參數傳遞給 addEventListener() 和 removeEventListener() 方法的兩個匿名函數是兩個 不同的函數。當使用以下程式碼新增事件監聽器時:
area.addEventListener('click',function(event) ...,true);
執行階段建立一個新的、唯一的匿名函數物件並將其指派給區域元素的按一下事件處理程序。
當使用以下程式碼刪除事件偵聽器:
area.removeEventListener('click',function(event) ...,true);
建立不同新的、唯一的匿名函數物件並將其指派給區域元素的單擊事件處理程序。第一個函數沒有移除,所以繼續處理點擊事件。
解決方案:
要正確移除事件監聽器,需要提供removeEventListener()方法引用傳遞給 addEventListener() 方法的相同函數物件。為此,事件偵聽器應定義為命名函數,然後該命名函數會套用 addEventListener() 和 removeEventListener() 方法的參數。例如:
function foo(event) { app.addSpot(event.clientX,event.clientY); app.addFlag = 1; } area.addEventListener('click',foo,true); area.removeEventListener('click',foo,true);
以上是為什麼我的 JavaScript removeEventListener() 不起作用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!