我有一个函数begin
,它声明了一个带有处理函数check
的addEventListener。现在,当check
内满足特定条件时,我想删除eventListener。
我的代码:
function begin(data){
//code
window.addEventListener('keyUp', check(data));
}
function check(data){
return function check1(event){
//code
if(condition) window.removeEventListener('keyUp', check(data));
}
}
一切正常,但它并没有删除EventListener
。
答案 0 :(得分:3)
您必须使check(data)
响应函数对处理程序唯一,例如将其传递给变量。否则,每次拨打check(data)
并尝试删除错误的一个时,您将获得另一个功能。
var handler;
function begin(data) {
handler = check(data);
window.addEventListener('keyUp', handler);
}
function check(data) {
return function check1(event) {
if(condition) {
window.removeEventListener('keyUp', handler);
}
}
}
答案 1 :(得分:3)
对于check1
的每次调用,check
始终是不同的功能,因此您可以使用window.removeEventListener('keyup', check1 )
删除自己:
function begin(data) {
//code
window.addEventListener('keyup', check(data));
}
function check(data) {
return function check1(event) {
if(condition) {
window.removeEventListener('keyup', check1 );
}
}
}
答案 2 :(得分:1)
正如其他人指出你的处理函数不是check
所以你不能删除它。处理函数是函数检查返回。
为了更好地了解最新情况,您可以输入。
check().prototype.constructor.name // 'check'
check.prototype.constructor.name // 'check1'