事件流描述从页面接收事件的顺序
事件发生时会在元素节点和根节点之间按照特定的顺序传播,路径所经过的节点都会收到该事件一DOM事件
流。
两种事件流模型:
1捕获:触发元素的事件时,该事件从该元素的祖先元素传递下去(不太具体的节点应该更早接收到事件,而最具体
的节点最后收到事件)
2.冒泡:到达此元素之后,又会向其祖先元素传播上去DOM标准规定事件流包括3个阶段:事件捕获、处于目标阶
段和事件冒泡

  • 事件捕获:实现目标在捕获阶段不会接收事件
  • 处于目标阶:事件在
    上发生并处理。但是事件处理会被看成是冒泡阶段的一部分
  • 冒泡阶段:事件又传播回文档

所有事件都要经过捕获阶段和处于目标阶段,但有些事件没有冒泡阶段。
如focus(获得输入焦点)和失去输入焦点的blur事件。无法进行委托
事件模型
原始事件模型
var btn = document.getElementByld(.btn’);
btn.onclick = fun;

  • 绑定速度快
    可能页面还未完全加载出来,事件可能无法正常运行
  • 只支持冒泡,不支持捕获
  • 同一个类型的事件只能绑定一次

var btn = document.getElementById(.btn’);
btn.onclick = fun2;
//出错后绑定的事件会覆盖掉之前的事件
删除DOM0级事件处理程序只要将对应事件属性置为ul即可
btn.onclick = null;

标准事件模型
·事件捕获:从document-一直向下传播到目标元素,依次检查经过的节点是否绑定了事件监听函数,如果有则执行
·事件处理:到达目标元素,触发目标元素的监听函数
·事件冒泡:从目标元素冒泡到document,依次检查经过的节点是否绑定了事件监听函数,如果有则执行
事件绑定监听函数的方式如下:
addEventListener(eventType,handler,useCapture)
事件移除监听函数的方式如下:
removeEventListener(eventType,handler,useCapture)
·eventType:指定事件类型(不要加on)
·handler是事件处理函数
·useCapture是boolean类型用于指定是否在捕获阶段进行处理,一般设置为false.与IE浏览器保持一致
举个例子:
var btn = document.getElementByld(.btn’);
btn.addEventListener(‘click’,showMessage,false);
btn.removeEventListener(‘click’,showMessage,false);
特性
可以在一个DOM元素上绑定多个事件处理器,不会冲突
btn.addEventListener(‘click’,showMessagel,false);
btn.addEventListener(‘click’,showMessage2,false);
btn.addEventListener(‘click’,showMessage3,false);
第三个参数(useCapture)设置为true就在捕获过程中执行,反之在冒泡过程中执行
E事件模型
·事件处理:事件到达目标元素,触发目标元素的监听函数。
·事件冒泡:事件从目标元素冒泡到document
·事件绑定监听函数的方式
attachEvent(eventType,handler)
·事件移除监听函数的方式
detachEvent(eventType,handler)
举个例子:
var btn = document.getElementByld(.btn’);
btn.attachEvent(‘onclick’,showMessage);
btn.detachEvent(‘onclick’,show Message);