作用:
-
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);
总结:
- 相同事件绑定和解除,需要使用共用函数;
- 共用函数不能带参数;