绑定事件几种方式:
HTML事件处理程序
<input type="button" value="click me" onclick="alert('clicked')"/>
DOM0级事件处理程序
$btn.onclick = function(){}
DOM2级事件处理程序
$btn.addEventListener('click', function(){}, false)
解除绑定:
$btn.onclick = null;
$btn.removeEventListener()
传入参数和addEventListener参数相同,也就是通过addEventListener添加的匿名函数无法移除。123function handler(){}$btn.addEventListener('click', handler, false);$btn.removeEventListener('click', handler, false);
onclick VS addEventListener:
使用addEventListener可以添加多个事件处理程序,都会触发。
12$btn.addEventListener('click', function(){ console.log(1); }); // 触发$btn.addEventListener('click', function(){ console.log(2); }); // 触发使用onclick会有覆盖,但是onclick不会覆盖addEventListener
12$btn.onclick = function(){ console.log(3); }; // 被覆盖$btn.onclick = function(){ console.log(3); }; // 触发
二者回调函数中的参数都是一样的,event一样,this指向也一样。
addEventListener小知识点
addEventListener第三个参数表示事件能否在捕获或冒泡阶段执行。默认false,事件发生在冒泡阶段执行。
阻止同类型事件的触发使用
event.stopImmediatePropagation()
,这个API会阻止事件的冒泡行为以及后序的同类型事件监听函数。blur、focus、load、unload这些事件不会冒泡。
addEventListener兼容性
|
|
JS自定义事件
创建自定义事件可以使用API来实现:
|
|
监听事件,触发事件执行回调函数的行为换种思路可以这样来实现:定义一个数组,push进去事件处理函数;执行时,遍历数组中事件处理函数并执行。
类似于这样的结构:
|
|
使用方式:
原型模式实现
|
|
需要实现自定义事件功能时候,先new构造下:
|
|
上面这种设计模式叫做发布-订阅者模式。观察者对象,有一个消息容器和三个方法,分别是订阅消息、取消消息、发布消息。