在銷燬元素之前,下面是否實際刪除事件?我不能在DOM檢查找出功能連接什麼,如果他們運行下面的代碼後取出:javascript消除事件監聽器
el.addEventListener('click', function attachFunction (a, b) {
console.log(a);
console.log(b);
}, false);
el.removeEventListener('click', attachFunction, false);
在銷燬元素之前,下面是否實際刪除事件?我不能在DOM檢查找出功能連接什麼,如果他們運行下面的代碼後取出:javascript消除事件監聽器
el.addEventListener('click', function attachFunction (a, b) {
console.log(a);
console.log(b);
}, false);
el.removeEventListener('click', attachFunction, false);
沒有,因爲它的立場,你的代碼將無法正常工作
注:要刪除事件處理程序,與addEventListener()方法中指定的函數必須是外部函數。
W3Schoolsw3fools - (不好意思,但有時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 statement或expression。有一個討論here的差異,但我會盡力涵蓋相關部分。
當用作語句中使用(如下),功能名稱將是語句的周邊範圍內有效:
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
會當您嘗試解除綁定是不確定的。
(我想你也有關於參數是如何傳遞給事件處理有些混亂,但這是另外一個問題。)
它不會刪除事件處理程序,它可能會產生一個錯誤的'attachFunction'是未在您嘗試刪除它的範圍中定義。 – adeneo 2015-04-03 14:10:04