# 事件冒泡和事件捕获

# 冒泡

当一个事件发生在一个元素上,它会首先运行在该元素上的处理程序,然后运行器父元素上的处理程序,然后一直向上到祖先节点上处理。

注意:几乎所有的事件都是可以冒泡的, focus事件不会冒泡。

# 停止冒泡

event.stopPropagation(); 我们不想要向上冒泡时,我们可以使用它来停止冒泡。

# 捕获

另一个事件处理的阶段是 捕获。

DOM 事件由三个阶段:

  1. 捕获阶段。 事件从 window 向下走进元素。
  2. 目标阶段 事件达到目标元素。
  3. 冒泡阶段, 事件从元素上开始冒泡。

点击一个元素,就会经历三个阶段,先从祖先向下到达元素,然后达到目标(目标阶段),最后上升, 在途中调用处理程序。

使用 on、addEventListener 添加的处理程序,都只是在第二阶段第三阶段运行。

我们可以设置 addEventListener(w..., {capture: true});

  1. 如果为 false(默认值),则在冒泡阶段设置处理程序。
  2. 如果为 true,则在捕获阶段设置处理程序。

# removeEventListener

用来移除处理程序, 需要在同一阶段才可以。 要么都为 true.