猿问

如何将绑定事件和移除事件封装为一个函数?

我想设置一个名为bindKeys的函数,如下:
functionbindKeys(flag){
functionkeydown(e){
if(e.keyCode==27){
keys.push('l');
}
}
functionkeyup(e){
if(e.keyCode==27){
keys.pop();
}
}
if(flag){
window.addEventListener('keydown',keydown);
window.addEventListener('keyup',keyup);
}else{
window.removeEventListener('keydown',keydown);
window.removeEventListener('keyup',keyup);
}
}
我是想通过flag判断是绑定事件还是解除绑定。可是我们都知道,每次调用这个函数时,keydown函数和keyup函数都会声名为新的函数,导致解除绑定失效。那有没有什么办法实现这一功能呢?难道必须要将keydown函数和keyup函数声名为全局函数吗?求解答!
HUH函数
浏览 310回答 2
2回答

犯罪嫌疑人X

用闭包保留上下文functionbindKeys(){varkeydown=function(e){if(e.keyCode==27){keys.push('l');}};varkeyup=function(e){if(e.keyCode==27){keys.pop();}};returnfunction(flag){if(flag){window.addEventListener('keydown',keydown);window.addEventListener('keyup',keyup);}else{window.removeEventListener('keydown',keydown);window.removeEventListener('keyup',keyup);}}}使用:varfn=bindKeys();fn(true);fn(false);

RISEBY

因为你每次调用bindKeys的时候,都生成了新的keydown和keyup函数,可以这样:keydown和keyup提升为全局量,要么就像楼上的那样
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答