- 在JavaScript中,事件流指的是DOM事件流。
- 当一个事件发生时,不仅产生事件的元素响应,其他的元素也会响应。
- 由于DOM模型是一个树状结构,其中的HTML元素上产生一个事件时,该事件会在DOM树中元素节点和根节点之间按照特定的顺序传播,路径所经过的节点都会收到该事件,这个过程就是DOM的事件流。
- 按照传播方向的不同,DOM事件流有两种方式:冒泡事件和捕获事件
- 关于事件的传导网景公司和微软公司有不同的理解
- 微软公司认为事件应该是由内向外传播,也就是当事件触发时,应该先触发当前元素上的事件,然后再向当前元素的祖先元素上传导,也就是说事件应该在冒泡阶段执行
- 网景公司认为事件应该是由外向内传导的,也就是当前事件触发时,应该先触发当前元素的最外层的祖先元素的事件,然后再向内传播给后代
- W3C综合了两个公司的方案,将事件传播分成了三个阶段
事件将沿着DOM树向下传递,经过目标节点的每一个祖先节点,直到目标节点。例如:用户单击了一个超链接,则该单击事件将从document节点转送到HTML元素、body元素以及包含超链接的div元素。就是目标节点。IE8及以下的浏览器没有捕获阶段
在次阶段中,事件传导到目标节点。浏览器在查找到已经指定给目标事件的事件监听器之后,就会运行该事件监听器
事件将沿着DOM树向上传递,再逐次访问目标元素的祖先节点直到documentj节点。该过程的每一步,浏览器都会执行那些不是捕捉事件监听器的事件监听器(EventListener)