一. 事件的传播分为三个阶段
1. 捕获阶段(capture phase)从外向内:在捕获阶段时从最外层的祖先元素(window对象),向目标元素进行事件的捕获,但是默认此时不会触发事件
2. 目标阶段(target phase):事件捕获到目标元素,捕获结束开始在目标元素上触发事件
3. 冒泡阶段(bubble phase)从内向外:事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件;(通俗来讲就是元素A中有子元素B,B元素的事件触发了,那么A元素相同的事件也会触发)
二. addEventListener的第三个参数
网景 和 微软 曾经的战争还是比较火热的,当时, 网景主张捕获方式,微软主张冒泡方式。后来 w3c 采用折中的方式,平息了战火,制定了统一的标准——先捕获再冒泡。
addEventListener的第三个参数就是为冒泡和捕获准备的.
addEventListener有三个参数:
element.addEventListener(event, function, useCapture)
第一个参数是需要绑定的事件
第二个参数是触发事件后要执行的函数
第三个参数默认值是false,表示在事件冒泡阶段调用事件处理函数;如果参数为true,则表示在事件捕获阶段调用处理函数。
三. 注意事项
父元素跟内嵌的iframe触发的事件毫无关系。比如:点击了iframe中的按钮,事件只会在iframe中传播父元素是收不到事件的,无捕获无冒泡。