Skip to content

不会冒泡的事件有哪些?

参考答案:

在 JavaScript 和浏览器中,绝大多数事件都会按照 DOM 事件流模型冒泡,即事件会从目标元素开始向上冒泡到它的父元素,并最终到达 document 元素。然而,也有一些事件是不会冒泡的。这些事件通常直接在目标元素上触发,并不会向上传播。

以下是一些不会冒泡的事件的示例:

  1. focus:当元素获得焦点时触发,例如通过键盘或鼠标点击。这是一个不会冒泡的事件。

  2. blur:当元素失去焦点时触发。这也是一个不会冒泡的事件。

  3. focusin:与 focus 类似,但会在元素或其父元素上触发(冒泡),因此这个事件是特例。

  4. focusout:与 blur 类似,但会在元素或其父元素上触发(冒泡),因此这个事件是特例。

  5. load:当图像、音频、视频或其他资源加载完成时触发。例如,在 img 元素上触发的 load 事件不会冒泡。

  6. unload:当页面即将被导航离开时触发。这通常用于执行清理工作,也不会冒泡。

  7. stop:通常与 media 元素相关,例如 audiovideo 元素。这是在媒体播放停止时触发的事件。

  8. readystatechange:当 documentreadyState 改变时触发。这通常在页面加载时使用。

  9. scroll:当元素滚动时触发。这个事件在某些浏览器中可能会冒泡。

这些事件通常直接在目标元素上触发,并且不会传播到父元素上。

题目要点:

题目解析

回答思路:先说一下标准事件模型都有哪3个阶段,然后根据题目要求阐述下不会 冒泡的事件有哪些。

扩展知识

  • 浏览器标准事件模型
  • addEventListener一共有几个参数及含义
  • React和Vue里事件监听是怎么处理的

思路和要点

  1. 了解事件流模型

    • 事件流分为三个阶段:捕获阶段、目标阶段、冒泡阶段。
    • 大多数事件会按照这个顺序,从根节点到目标节点(捕获阶段),在目标节点上触发(目标阶段),然后从目标节点向上传播到根节点(冒泡阶段)。
  2. 识别不会冒泡的事件

    • 不会冒泡的事件在目标元素上触发后,不会传播到父元素。
    • 候选人应了解具体哪些事件不会冒泡,并能够举出几个常见的例子。
  3. 详细解释每个不会冒泡的事件

    • focusblur:这些事件涉及元素的焦点变化,不会冒泡。通常在表单元素上使用。
    • loadunload:资源加载和页面卸载时触发,常用于执行初始化和清理工作。
    • stop:与媒体元素相关,当媒体播放停止时触发。
    • readystatechange:文档的 readyState 变化时触发,通常用于检测文档加载状态。
    • scroll:当元素滚动时触发,虽然在某些浏览器中可能会冒泡,但大多数情况下不会冒泡。
  4. 解释例外情况

    • focusinfocusout:这两个事件是 focusblur 的特例,它们会冒泡。
  5. 应用场景和最佳实践

    • 了解这些事件在实际开发中的应用场景,例如表单验证、资源加载优化等。
    • 掌握如何使用事件委托处理冒泡事件,以及在不会冒泡的事件中如何手动处理。