logo头像
Snippet 博客主题

事件捕获、冒泡

DOM事件流(event flow )存在三个阶段:

  1. 事件捕获阶段
  2. 处于目标阶段
  3. 事件冒泡阶段

在事件绑定的方法 addEventListener 中,第三个参数 useCapture 决定是否采用事件捕获进行事件捕捉。

addEventListener(event, listener, useCapture)      
参数定义:
event—(事件名称,如click,不带on)
listener—事件监听函数
useCapture—是否采用事件捕获进行事件捕捉,默认为false,即采用事件冒泡方式

事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元素,如果父元素通过事件捕获方式注册了对应的事件的话,会先触发父元素绑定的事件。

事件冒泡(dubbed bubbling):与事件捕获恰恰相反,事件冒泡顺序是由内到外进行事件传播,直到根节点。

事件触发顺序是由内到外的,虽然只点击子元素,但是它的父元素也会触发相应的事件,其实这是合理的,因为子元素在父元素里面,点击子元素也就相当于变相的点击了父元素

如果点击子元素不想触发父元素的事件,可以使用 event.stopPropagation() 停止事件传播

1
2
3
4
child.addEventListener("click",function(e){
console.log("click-child");
e.stopPropagation();
},false);