作用:
-
addEventListener()與removeEventListener()用于處理指定和刪除事件處理程序操作。 - 它們都接受3個(gè)參數(shù):事件名、事件處理的函數(shù)和布爾值。
- 布爾值參數(shù)是
true,表示在捕獲階段調(diào)用事件處理程序;如果是false,表示在冒泡階段調(diào)用事件處理程序。
示例:
- 環(huán)境:移動(dòng)端,界面禁止觸摸事件
- 要在body上添加事件處理程序,可以使用下列代碼
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},false);
通過addEventListener()添加的事件處理程序只能使用removeEventListener()來移除;
移除時(shí),傳入的參數(shù)和添加處理的程序,需使用相同的參數(shù);
這也意味著通過addEventListener()添加的匿名函數(shù)無法移除;
- 錯(cuò)誤用法示例:
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},false);
document.body.removeEventListener('touchmove', function (event) {
event.preventDefault();
},false);
這個(gè)例子中,使用addEventListener()添加一個(gè)事件處理程序。
然后調(diào)用removeEventListener()移除事件,看起來好像使用了相同的參數(shù),但實(shí)際上第二個(gè)參數(shù),與傳入addEventListener()中的那一個(gè)是完全不同的函數(shù)。
所以傳入removeEventListener()中的事件處理程序函數(shù),必須與傳addEventListener()中的相同才可行。
- 正確用法示例:
function bodyScroll(event){
event.preventDefault();
}
document.body.addEventListener('touchmove',bodyScroll,false);
document.body.removeEventListener('touchmove',bodyScroll,false);
重寫后的這個(gè)例子沒有問題,是因?yàn)?code>addEventListener()和removeEventListener()中使用了同一個(gè)函數(shù)(也就是共用函數(shù))。
- 共用函數(shù)不能帶參數(shù),錯(cuò)誤用法示例:
function bodyScroll(event){
event.preventDefault();
}
document.body.addEventListener('touchmove',bodyScroll(event),false);
document.body.removeEventListener('touchmove',bodyScroll(event),false);
總結(jié):
- 相同事件綁定和解除,需要使用共用函數(shù);
- 共用函數(shù)不能帶參數(shù);