Skip to content

HTML

一、常见的浏览器默认事件

  • form 的 submit 事件
  • 回车键提交表单
  • a 标签的 click 事件
  • 移动端双指缩放 touchmove 事件

二、事件捕获与冒泡机制

当用户点击页面元素时,事件会经历三个阶段:

  • ​捕获阶段(Capture Phase)​​:从 window → document → ... → 目标元素的父级
  • ​目标阶段(Target Phase)​​:到达实际被点击的元素
  • ​冒泡阶段(Bubble Phase)​​:从目标元素父级 → ... → document → window

假设有以下 HTML 结构:

html
<div class="grandparent">
  <div class="parent">
    <div class="child">点击我</div>
  </div>
</div>

我们给三个元素都添加事件监听:

javascript
const elements = document.querySelectorAll('.grandparent, .parent, .child');

// 捕获阶段监听(第三个参数为true)
elements.forEach(el => {
  el.addEventListener('click', () => {
    console.log(`捕获阶段: ${el.className}`);
  }, true);
});

// 冒泡阶段监听(第三个参数为false)
elements.forEach(el => {
  el.addEventListener('click', () => {
    console.log(`冒泡阶段: ${el.className}`);
  }, false);
});

当点击最内层的 child 时,控制台会按以下顺序输出:

捕获阶段: grandparent
捕获阶段: parent
捕获阶段: child
冒泡阶段: child
冒泡阶段: parent
冒泡阶段: grandparent

三、