不会冒泡的事件有哪些?
参考答案:
在 JavaScript 和浏览器中,绝大多数事件都会按照 DOM 事件流模型冒泡,即事件会从目标元素开始向上冒泡到它的父元素,并最终到达 document 元素。然而,也有一些事件是不会冒泡的。这些事件通常直接在目标元素上触发,并不会向上传播。
以下是一些不会冒泡的事件的示例:
focus:当元素获得焦点时触发,例如通过键盘或鼠标点击。这是一个不会冒泡的事件。blur:当元素失去焦点时触发。这也是一个不会冒泡的事件。focusin:与focus类似,但会在元素或其父元素上触发(冒泡),因此这个事件是特例。focusout:与blur类似,但会在元素或其父元素上触发(冒泡),因此这个事件是特例。load:当图像、音频、视频或其他资源加载完成时触发。例如,在img元素上触发的load事件不会冒泡。unload:当页面即将被导航离开时触发。这通常用于执行清理工作,也不会冒泡。stop:通常与media元素相关,例如audio或video元素。这是在媒体播放停止时触发的事件。readystatechange:当document的readyState改变时触发。这通常在页面加载时使用。scroll:当元素滚动时触发。这个事件在某些浏览器中可能会冒泡。
这些事件通常直接在目标元素上触发,并且不会传播到父元素上。
题目要点:
题目解析
回答思路:先说一下标准事件模型都有哪3个阶段,然后根据题目要求阐述下不会 冒泡的事件有哪些。
扩展知识:
- 浏览器标准事件模型
- addEventListener一共有几个参数及含义
- React和Vue里事件监听是怎么处理的
思路和要点
了解事件流模型:
- 事件流分为三个阶段:捕获阶段、目标阶段、冒泡阶段。
- 大多数事件会按照这个顺序,从根节点到目标节点(捕获阶段),在目标节点上触发(目标阶段),然后从目标节点向上传播到根节点(冒泡阶段)。
识别不会冒泡的事件:
- 不会冒泡的事件在目标元素上触发后,不会传播到父元素。
- 候选人应了解具体哪些事件不会冒泡,并能够举出几个常见的例子。
详细解释每个不会冒泡的事件:
focus和blur:这些事件涉及元素的焦点变化,不会冒泡。通常在表单元素上使用。load和unload:资源加载和页面卸载时触发,常用于执行初始化和清理工作。stop:与媒体元素相关,当媒体播放停止时触发。readystatechange:文档的readyState变化时触发,通常用于检测文档加载状态。scroll:当元素滚动时触发,虽然在某些浏览器中可能会冒泡,但大多数情况下不会冒泡。
解释例外情况:
focusin和focusout:这两个事件是focus和blur的特例,它们会冒泡。
应用场景和最佳实践:
- 了解这些事件在实际开发中的应用场景,例如表单验证、资源加载优化等。
- 掌握如何使用事件委托处理冒泡事件,以及在不会冒泡的事件中如何手动处理。