事件绑定、事件解绑
事件绑定:在 JS 内有两种事件绑定方式
-
DOM 0级 事件绑定
使用 on 语法进行绑定
语法: 事件源.on事件类型 = 事件处理函数
特点: 同一个事件源的同一个事件类型只能绑定一个事件处理函数
-
DOM 2级 事件绑定(事件侦听器/事件监听器)
标准浏览器:
语法: 事件源.addEventListener(‘事件类型’, 事件处理函数)
特点: 同一个事件源的同一个事件类型可以绑定多个事件处理函数, 顺序绑定顺序执行
IE 低版本
语法: 事件源.attachEvent(‘on事件类型’, 事件处理函数)
特点: 同一个事件源的同一个事件类型可以绑定多个事件处理函数, 顺序绑定倒序执行
var ele = document.querySelector('div')
// 1. DOM 0级事件绑定
// ele.onclick = function () { console.log('我是第一个 DOM 0级 事件绑定的事件处理函数') }
// ele.onclick = function () { console.log('我是第二个 DOM 0级 事件绑定的事件处理函数') }
// 2-1. 标准浏览器 DOM 2级 事件绑定
// ele.addEventListener('click', function () { console.log('我是第一个 DOM 2级 事件绑定的事件处理函数') })
// ele.addEventListener('click', function () { console.log('我是第二个 DOM 2级 事件绑定的事件处理函数') })
事件解绑
取消已经绑定好的事件
- DOM 0级 事件解绑
语法: 事件源.on事件类型 = null
因为 赋值符号 覆盖的原因, 就可以解绑
-
DOM 2级 事件解绑 - 标准浏览器
语法: 事件源.removeEventListener(‘事件类型’, 要解绑的事件处理函数)
注意: DOM 2级事件如果你需要解绑, 那么在绑定的时候, 需要把函数单独书写, 以函数名的形式进行绑定
var ele = document.querySelector('div') var btn = document.querySelector('button') // 绑定 DOM 0级 事件 // ele.onclick = function () { console.log('我是一个事件处理函数') } // 标准浏览器绑定 DOM 2级 事件 // 在事件绑定的时候, 实际上是把 a 函数和 b 函数的地址传递到了 addEventListener 内 function b() { console.log('222222') } ele.addEventListener('click', function a() { console.log('111111') }) ele.addEventListener('click', b) btn.onclick = function () { console.log('点击我准备解绑事件') // 执行解绑事件的代码 // 1. DOM 0级 事件解绑 // ele.onclick = null // 2. DOM 2级 事件解绑 - 标准浏览器 // 解绑的时候, 把 c 函数的地址传递到 removeEventListener 内了 // ele.removeEventListener('click', function c() { console.log('222222') }) ele.removeEventListener('click', b) console.log('解绑事件的代码执行完毕') }
补充
声明式函数的函数名
-
特指小括号前面那个名字
-
可以再函数外使用, 可以在函数内使用
-
函数表达式(赋值式函数/匿名函数) 的函数名
+ 特指小括号前面那个名字
=> 例子:
-> var fn = function f() {}
-> var obj = { fn: function f() {} }
-> addEventListener(xxx, function f() {})
+ 只能在函数内使用, 在函数外不能用