Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
JavaScript中事件冒泡与事件捕获机制_javascript技巧_创想鸟

JavaScript中事件冒泡与事件捕获机制_javascript技巧

事件传播分捕获、目标、冒泡三阶段;默认在冒泡阶段执行,通过addEventListener第三参数可设为捕获;使用stopPropagation可阻止传播,实现精确事件控制。

javascript中事件冒泡与事件捕获机制_javascript技巧

在JavaScript中,事件冒泡和事件捕获是DOM事件传播的两种机制。理解它们对开发交互式网页至关重要,尤其是在处理嵌套元素的事件时。

事件传播的三个阶段

当一个事件(如点击)发生在某个DOM元素上时,它并不会立即触发该元素的事件处理程序,而是经历三个阶段:

捕获阶段(Capture Phase):事件从window对象向下传递,经过document、html、body,直到目标元素的父级。 目标阶段(Target Phase):事件到达绑定事件的目标元素本身。 冒泡阶段(Bubbling Phase):事件从目标元素逐级向上传播回window对象。

大多数开发者只熟悉冒泡阶段,因为默认情况下事件监听器在冒泡阶段执行。

事件冒泡(Event Bubbling)

事件冒泡是指事件先由最具体的元素接收,然后逐级向上传播至最不具体的节点(如document或window)。

立即学习“Java免费学习笔记(深入)”;

例如:

假设HTML结构如下:

点击我

JavaScript代码:

document.getElementById('outer').addEventListener('click', function() {  console.log('外层div被点击');});document.getElementById('inner').addEventListener('click', function() {  console.log('内层div被点击');});

当你点击“内层div”时,输出顺序为:

内层div被点击 外层div被点击

这就是冒泡:事件从inner传播到outer。

事件捕获(Event Capturing)

事件捕获与冒泡相反:事件从最不具体的节点(window)开始,逐级向下传递,直到目标元素。

要启用捕获模式,在addEventListener中将第三个参数设为true:

document.getElementById('outer').addEventListener('click', function() {  console.log('捕获阶段:外层div');}, true);document.getElementById('inner').addEventListener('click', function() {  console.log('目标阶段:内层div');}, false);

此时点击inner,输出为:

捕获阶段:外层div 目标阶段:内层div

外层div的事件在捕获阶段触发,inner仍在冒泡阶段执行(因设为false)。

如何阻止事件传播

有时你不希望事件继续传播,可以使用以下方法:

event.stopPropagation():阻止事件继续在当前阶段传播(无论是捕获还是冒泡)。 event.stopImmediatePropagation():除了阻止传播,还阻止当前元素上其他同类型事件处理函数的执行。

示例:

document.getElementById('inner').addEventListener('click', function(e) {  e.stopPropagation();  console.log('内层div,但阻止冒泡');});document.getElementById('outer').addEventListener('click', function() {  console.log('外层div');});

此时点击inner,只会输出“内层div,但阻止冒泡”,外层不会响应。

基本上就这些。掌握事件冒泡和捕获,能帮助你更精准地控制事件行为,避免意外触发,也能实现事件委托等高级技巧。

以上就是JavaScript中事件冒泡与事件捕获机制_javascript技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1533534.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Chrome回退按钮导致JS失效:深入解析与鲁棒性解决方案
上一篇 2025年12月21日 00:49:08
使用FileReader API处理前端文件读取_javascript技巧
下一篇 2025年12月21日 00:49:17

相关推荐

发表回复

登录后才能评论
关注微信