簡體   English   中英

javascript刪除事件監聽器

[英]javascript removing event listeners

以下是否在銷毀元素之前實際刪除了該事件? 我無法在DOM檢查器中弄清楚附加了哪些函數以及在運行以下代碼后是否將其刪除:

el.addEventListener('click', function attachFunction (a, b) {
    console.log(a);
    console.log(b);
}, false);

el.removeEventListener('click', attachFunction, false);

不,就目前而言,您的代碼將無效

注意:要刪除事件處理程序,使用addEventListener()方法指定的函數必須是外部函數。

W3Schools w3fools - (對不起,但有時w3fools確實提供你想要的)

所以,你需要這樣做:

function attachFunction(a, b){
  console.log(a);
  console.log(b);
}

el.addEventListener('click', attachFunction, false);

el.removeEventListener('click', attachFunction, false);

這將按預期工作。

如果要將某些參數傳遞給函數attachFunction ,則需要使用另一個函數:

function attachFunction(a, b){
  console.log(a);
  console.log(b);
}

function linkFunction(){
  attachFunction(a, b); // a and b can be replaced with anything you want
}

el.addEventListener('click', linkFunction, false);

el.removeEventListener('click', linkFunction, false);

如果您希望能夠刪除使用addEventListener添加的事件偵聽器,請在addEventListener()調用外部定義它:

function attachFunction (a, b) {
    console.log(a);
    console.log(b);
}

然后:

el.addEventListener("click", attachFunction);

然后你的.removeEventListener()可以工作。

語法function foo(whatever)在運行時之前進行了評估,因此我不認為您的代碼是有效的語法或具有預期的行為。 你應該更好地使用這樣的匿名函數:

var attachFunction = function(a, b) {
    console.log(a);
    console.log(b);
}
el.addEventListener('click', attachFunction, false);
el.removeEventListener('click', attachFunction, false);

還請注意,事件偵聽器(此處為attachFunction )只能有一個參數,即事件對象。

function關鍵字可以使用兩種方式:作為函數語句表達式 這里討論了不同之 ,但我將嘗試涵蓋相關部分。

當用作語句(如下所示)時,函數名稱將在語句的周圍范圍內有效:

function hi(){ 
    console.log(typeof hi); // "function"
}
console.log(typeof hi); // "function"

但是當用作表達式時,函數名稱僅函數體中有效:

var greetings = function hi(){ 
    console.log(typeof hi); // "function"
}
console.log(typeof hi); // "undefined"
console.log(typeof greetings); // "undefined

因此,您的初始示例的范圍問題是,因為您將其用作表達式,所以當您嘗試取消綁定時,名稱attachFunction將是未定義的。

(我認為你對參數如何傳遞給事件處理程序也有一些困惑,但這是一個單獨的問題。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM