Javascript 从处理程序函数中删除窗口事件侦听器
我有一个函数Javascript 从处理程序函数中删除窗口事件侦听器,javascript,event-listener,Javascript,Event Listener,我有一个函数begin,它声明了一个带有处理函数check的addEventListener。现在,当在检查中满足特定条件时,我想删除eventListener 我的代码: function begin(data){ //code window.addEventListener('keyUp', check(data)); } function check(data){ return function check1(event){ //code
begin
,它声明了一个带有处理函数check
的addEventListener。现在,当在检查中满足特定条件时,我想删除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
您必须使检查(数据)
响应函数对于处理程序是唯一的,就像将其传递给变量一样。否则,每次调用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);
}
}
}
check1
对于check
的每次调用始终是不同的函数,因此您可以使用窗口删除它本身。removeEventListener('keyup',check1)
:
正如其他人指出的,您的处理程序函数不是check
,因此无法删除它。handler函数是check返回的函数
为了更好地理解发生了什么,你可以打字
check().prototype.constructor.name // 'check'
check.prototype.constructor.name // 'check1'
可能是Psst的副本,它是removeEventListener(),而不是removeListener():)另外:阅读答案。它不应该是removeEventListener吗?当然,谢谢。刚从问题中复制了代码@在这个特定示例中,MetaphoxYou不需要全局变量。您可以使用check1
而不是handler
,因为每次调用check
时,它总是不同的。。我明白了!谢谢,哇。这个也起作用了。现在我很困惑,因为艾斯贝尔的答案也有效。我应该把哪一个标记为最佳答案我投这个票,但另一个家伙的分数比较低,所以你也可以喂另一个:Dyours更好,因为它使用的是已经可用的东西。^拿a+1
check().prototype.constructor.name // 'check'
check.prototype.constructor.name // 'check1'