事件流定义

事件是 JavaScript 与 HTML 交互的基础。要实现用户与页面的交互,先要对目标元素绑定特定的事件、设置事件处理函数,然后用户触发事件,事件处理函数执行,产生交互效果。
事件流又称为事件传播,描述的是从页面中接收事件的顺序。DOM2 级事件规定事件流包括三个阶段: 事件捕获(capturing phase)目标事件(target phase)事件冒泡(bubbling phase)
发生的顺序是:事件捕获阶段 —> 目标事件阶段 —> 事件冒泡阶段

事件冒泡

E的事件流叫做事件冒泡,即事件开始时有最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点,直到document对象。
2607679169-578df3d06fbbb_articlex.png

事件捕获

Netscape Communicator团队提出的另一种事件流叫做事件捕获。事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。
3522909028-578df503388bc_articlex.png

DOM事件流

“DOM2级事件”规定的事件流包括三个阶段:事件捕获、处于目标阶段和事件冒泡阶段。发生的顺序是事件捕获阶段==>目标阶段==>事件冒泡阶段
3824789638-578df6290d00c_articlex.png
W3C : 任何事件发生时,先从顶层开始进行事件捕获,直到事件触发到达事件源,再从事件源向上进行事件捕获(事件冒泡)。

标准浏览器:addEventListener(“click”,function,”true”)方法,若第三参数为true,则采用事件捕获。若为false,则采用事件冒泡。

IE浏览器只支持事件冒泡,不支持事件捕获,所以它不支持addEventListener(“click”,function,”true”)方法,所以ie浏览器使用ele.attachEvent(“onclick”,doSomething)。

事件传播的阻止方法:

在W3C中,使用stopPropagation()方法。

在IE下使用cancelBubble = true方法。

阻止默认行为:

在W3c中,使用preventDefault()方法。

在IE下return false。