为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2019-05-25 14:10:11
我想设置一个名为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函数声名为全局函数吗?求解答!
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

用闭包保留上下文
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);
                            
查看完整回答
反对 回复 2019-05-25
?
RISEBY

TA贡献1856条经验 获得超5个赞

因为你每次调用bindKeys的时候,都生成了新的keydown和keyup函数,可以这样:keydown和keyup提升为全局量,要么就像楼上的那样
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号