事件冒泡是指当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这 一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。
事件有三个阶段:捕获和冒泡不可能同时
* 1.事件捕获阶段(eventPhase=1) 从外向内(true)
* 2.事件目标阶段(eventPhase=2)
* 3.事件冒泡阶段(eventPhase=3) 从内向外(false) 一般默认冒泡
一般事件的流程是:事件捕捉—>目标元素发生事件—>事件冒泡。但是不是所有的事件和click事件都一样是冒泡的??
可以在监听事件的回调函数里面通过console.log打印事件参数event对象的bubbles属性,返回值true是可冒泡 false不冒泡。
不支持冒泡的事件有哪些呢?
blur、focus、load、unload 、以及自定义的事件。
原因是在于:这些事件仅发生于自身上,而它的任何父节点上的事件都不会产生,所有不会冒泡。
/* 阻止事件冒泡:
* window.event.canceBubble=true; IE和谷歌支持,火狐不支持
* e.stopPropagation(); 谷歌和火狐支持,IE不支持
* */
事件参数e在IE8的浏览器中是不存在的,用window.event来代替