【发布时间】:2018-03-24 01:32:19
【问题描述】:
我遇到了一个非常奇怪的情况,阻止我删除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
问题是,监听器没有被移除。我能做什么?
CodePen 供参考:https://codepen.io/tomekbuszewski/pen/LzBZgP?editors=0010
我也试过不带operation,只是写
if (remove) {
window.removeEventListener('keyup', keyboardFunction);
} else {
window.addEventListener('keyup', keyboardFunction);
}
结果是一样的。
【问题讨论】:
-
它在你的小提琴上正常工作
-
不是,控制台中的 cmets 很好,但是监听器仍然存在(请参考 Chrome Inspector 中的
Event Listeners标签)。