首頁 > web前端 > js教程 > 主體

為什麼我的 JavaScript removeEventListener() 不起作用?

Susan Sarandon
發布: 2024-11-02 14:42:30
原創
662 人瀏覽過

Why is my JavaScript removeEventListener() not working?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板