Javascript RemoveEventListener不';行不通
我有一个非常奇怪的例子,它阻止我删除Javascript RemoveEventListener不';行不通,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个非常奇怪的例子,它阻止我删除eventListener。这是一个非常简单的函数,可以绑定到键盘事件并在不需要时解除绑定(理论上) 代码如下: const keyboardEvents = function(input, remove = false) { const { key, func } = input; const operation = remove ? 'removeEventListener' : 'addEventListener'; funct
eventListener
。这是一个非常简单的函数,可以绑定到键盘事件并在不需要时解除绑定(理论上)
代码如下:
const keyboardEvents = function(input, remove = false) {
const { key, func } = input;
const operation = remove ? 'removeEventListener' : 'addEventListener';
function keyboardFunction(event) {
console.log(event);
if (event.keyCode === key) {
func();
}
}
window[operation]('keyup', keyboardFunction);
if (remove) {
console.log('REMOVED');
} else {
console.log('ADDED');
}
};
我用它运行
keyboardEvents({ key: 27, func: testFunc }); // add event
keyboardEvents({ key: 27, func: testFunc }, true); // remove event
问题是,侦听器没有被删除。我能做什么
代码笔供参考:
我也尝试了不使用操作
,只编写代码
if (remove) {
window.removeEventListener('keyup', keyboardFunction);
} else {
window.addEventListener('keyup', keyboardFunction);
}
结果是相同的。您需要为从事件处理程序中删除提供相同的函数引用。每次调用
keyboardEvents
时,都会创建一个名为
键盘功能
,因此有不同于通话的功能。那为什么你不能移除它呢
尝试此代码。您需要为从事件处理程序中删除提供相同的函数引用。每次调用
keyboardEvents
时,都会创建一个名为
键盘功能
,因此有不同于通话的功能。那为什么你不能移除它呢
试试这段代码。它在你的小提琴上正常工作不是,控制台中的注释可以,但监听器仍然存在(请参阅Chrome Inspector中的
事件监听器
选项卡)。它在你的小提琴上正常工作不是,控制台中的注释可以,但监听器仍然存在(请参阅Chrome Inspector中的事件监听器
选项卡)。我明白了。因此我应该将键盘函数
作为参数传递给键盘事件
?我尝试在外部定义它,但没有成功(请参阅更新的fiddle).@TomekBuszewski我在想。你需要每次都有相同的引用。但是请注意,为什么你在每个keyup
上附加新的eventlistener?这是非常短暂的绑定,所以没有必要创建一个更大的侦听器并保留它。我明白了。所以我应该将键盘函数作为参数传递给keyboaRdeEvents
?我尝试在外部定义它,但这不起作用(请参阅更新的fiddle)。@TomekBuszewski我在想。你需要每次都有相同的引用。但是请注意,为什么你在每个键上都附加新的eventlistener?这是非常短暂的绑定,所以创建一个更大的侦听器并保留它是没有意义的。