JavaScript 事件系统

浏览器中事件监听、事件流、事件对象与委托模式的核心说明。

#type / concept #status / growing #resource / javascript #resource / web #platform / browser

[!info] related notes

JavaScript 事件系统

浏览器中的事件系统负责把用户动作、浏览器状态变化和宿主回调,转换成 JavaScript 可以订阅和响应的信号。

先抓住四个词

  • 事件源: 谁触发了事件
  • 监听器: 哪个函数在响应事件
  • 事件对象: 这次事件携带了什么信息
  • 事件流: 事件如何在节点间传播

DOM 事件流

标准事件流分三段:

  1. 捕获阶段
  2. 到达目标
  3. 冒泡阶段

这也是事件委托成立的前提。

继续拆开看:

最常见的事件家族

  • 鼠标与指针: clickmousedownmousemove
  • 键盘与输入: keydownkeyupinputchange
  • 焦点: focusblur
  • 窗口与页面: loadbeforeunloadresizescroll

事件对象里最常看的字段

  • type: 事件类型
  • target: 实际触发源
  • currentTarget: 当前正在处理监听器的对象
  • preventDefault(): 阻止默认行为
  • stopPropagation(): 阻止继续传播

最有价值的实践模式

事件委托

把监听器挂在父元素上,利用冒泡统一处理子元素事件,能减少监听器数量,也更适合动态列表。

明确监听选项

  • capture: 是否在捕获阶段处理
  • once: 是否只执行一次
  • passive: 是否承诺不调用 preventDefault()

边界提醒

  • 事件系统依附于浏览器宿主,不属于 ECMAScript 语法本体
  • 事件触发后的回调调度要放回事件循环理解,见 js事件循环
  • DOM 节点事件只是浏览器事件的一部分,windowdocumenthistory 等对象也能参与
创建于 2025/1/1 更新于 2026/5/27