# 解释下什么是 Event Bubbling (事件冒泡) 以及如何避免

  • 指某个事件不仅会触发当前元素,还会以嵌套顺序传递到父元素中。
    即某个子元素的点击事件会被父元素的点击事件处理器捕获。

# 解决方法

if(ev && ev.stopPropagation) {
  // 非IE浏览器
  ev.stopPropagation();
} else {
  // IE浏览器(IE11以下)
  ev.cancelBubble = true;
}
1
2
3
4
5
6
7

# 事件冒泡和事件捕获

  • 事件捕获 事件首先由最外层的元素捕获,然后传播到最内层元素
    假设单击事件发生在li元素中,在这种情况下,捕获事件将首先处理div,然后处理ul,最后命中目标元素li
<div>
  <ul>
    <li>
    </li>
  </ul>
</div>
1
2
3
4
5
6
  • 事件冒泡 事件由最内部元素处理,然后传播到外部元素
    假设click事件确实发生在冒泡模型中的li元素中,该事件将首先由li处理,然后由ul处理,最后由div元素处理。