JS添加事件和解绑事件:addEventListener()与removeEventListener()

作用:
  • addEventListener()removeEventListener()用于处理指定和删除事件处理程序操作。
  • 它们都接受3个参数:事件名、事件处理的函数和布尔值。
  • 布尔值参数是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。
示例:
  • 环境:移动端,界面禁止触摸事件
  • 要在body上添加事件处理程序,可以使用下列代码
document.body.addEventListener('touchmove', function (event) {
    event.preventDefault();
},false);

通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;
移除时,传入的参数和添加处理的程序,需使用相同的参数;
这也意味着通过addEventListener()添加的匿名函数无法移除;

  • 错误用法示例:
document.body.addEventListener('touchmove', function (event) {
    event.preventDefault();
},false);
document.body.removeEventListener('touchmove', function (event) {
    event.preventDefault();
},false);

这个例子中,使用addEventListener()添加一个事件处理程序。
然后调用removeEventListener()移除事件,看起来好像使用了相同的参数,但实际上第二个参数,与传入addEventListener()中的那一个是完全不同的函数。
所以传入removeEventListener()中的事件处理程序函数,必须与传addEventListener()中的相同才可行。

  • 正确用法示例:
function bodyScroll(event){
    event.preventDefault();
}
document.body.addEventListener('touchmove',bodyScroll,false);
document.body.removeEventListener('touchmove',bodyScroll,false);

重写后的这个例子没有问题,是因为addEventListener()removeEventListener()中使用了同一个函数(也就是共用函数)。

  • 共用函数不能带参数,错误用法示例:
function bodyScroll(event){
    event.preventDefault();
}
document.body.addEventListener('touchmove',bodyScroll(event),false);
document.body.removeEventListener('touchmove',bodyScroll(event),false);
总结:
  • 相同事件绑定和解除,需要使用共用函数;
  • 共用函数不能带参数;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容