当前位置: 首页 > news >正文

js中不会冒泡的事件有哪些?

不会冒泡的事件有哪些?

核心规则:大多数原生DOM事件会冒泡,但凡标记了bubbles:false的就不会。

一、最常被踩坑的几个

1.focus/blur-不冒泡

// ❌ blur/focus 不冒泡,这样可能收不到 parent.addEventListener('blur', handler); // ✅ 方案A:用冒泡版(部分浏览器支持) parent.addEventListener('focusin', handler); parent.addEventListener('focusout', handler); // ✅ 方案B:捕获阶段监听(最通用、最可靠) parent.addEventListener('focus', handler, true); parent.addEventListener('blur', handler, true);

2.mouseenter/mouseleave-刻意不冒泡

这就是它们存在的原因-跟mouseover/mouseout做区分:

事件冒泡穿过子元素时会重复触发?
mouseover/mouseout冒泡会(因为子元素边界也算)
mouseenter/mouseleave不冒泡不会(只在进出“当前元素整体”时各一次)
el.addEventListener('mouseenter', () => console.log('enter')); // OK // 挂到父元素上等它冒泡上来 → 永远不会触发

3.scroll-不冒泡

// ❌ 这样通常没用(scroll 不冒泡) parent.addEventListener('scroll', handler); // ✅ 捕获阶段才能拦到子元素的 scroll parent.addEventListener('scroll', handler, { capture: true });

二、完整归类清单

焦点类(Focus Events)

事件冒泡?备注
focus不冒泡
blur不冒泡
focusin冒泡IE起源,规范仍保留但部分环境有差异
focusout冒泡同上

鼠标指针进入/离开类

事件冒泡?
mouseenter×
mouseleave

×

pointerenter×
pointerleave×

资源加载/页面生命周期类

这些事件的触发源本身就不在常规“冒泡链”里:

事件冒泡?触发对象
load(img/iframe/script等元素级)×特定元素
error(资源加载失败)×img/script/link等
unload×window
beforeunload×window
readystatechange×document/xhr

滚动/尺寸类

事件冒泡?
scroll×(bubbles:false)
resizeN/A(只存在于window)

表单验证类

事件冒泡?
invalid×不冒泡
// invalid 不会冒泡到 form 上通过冒泡捕获 form.addEventListener('invalid', handler); // ❌ 大概率漏掉 form.addEventListener('invalid', handler, true); // ✅ 捕获阶段

三、怎么自己验证?

任何事件都可以秒查:

const e = new MouseEvent('click'); console.log(e.bubbles); // true const f = new FocusEvent('focus'); console.log(f.bubbles); // false // 对已有事件类型查原形 console.log(Event.prototype.__proto__.constructor === UIEvent); // 辅助判断类型 // 更直接:查 MDN 或规范,或者: document.createElement('div').onfocus; // 看看它是什么事件

或直接在控制台看规范属性:

// 创建一个真实 event 看它的 bubbles/composed const evt = new Event('yourEventType', { bubbles: true }); // 但注意:内置事件要这样看: const scrollEvt = new UIEvent('scroll'); Object.getOwnPropertyNames(scrollEvt);

"状态通知型"事件多半不冒泡,"交互动作型"事件多半冒泡。

  • 焦点是状态 →focus/blur不冒泡

  • 进出一个区域是边界语义 →mouseenter/mouseleave不冒泡

  • 滚动是元素自身状态变化 →scroll不冒泡

  • 点击是明确的用户动作 →click冒泡 ✅

http://www.cnnetsun.cn/news/2853320.html

相关文章:

  • Hybrid AI应用架构设计——WebView+LLM混合开发实践
  • 茶馆主题H5前端静态包|uni-app编译生成,2020风格UI,开箱即用
  • 协议碎片化与性能瓶颈破局:WVP-GB28181-Pro分布式视频管理平台架构深度解析
  • AlistHelper:告别命令行,用图形界面轻松管理Alist文件服务
  • Paperxie 工科代码辅助:AI 一键匹配论文需求生成完整工程源码
  • 【学术干货】清华团队发布RWAI框架:让AI从“能做“到“能落地“,产业应用效率提升50%
  • 线上 Bug 排查与修复实录
  • Android 权限请求构建器使用指南
  • 中小企业做GEO的投入和产出怎么算——从成本、时间线和效果三个方向来看
  • Windows苹果触控板终极指南:免费实现原生级触控体验的完整教程
  • 2026年医学文献AI解读工具热门平台盘点:当循证决策成为医生工作流的新标配
  • 涉及内存指针位运算例题摘要
  • 前端八股文面经大全:美团前端暑期实习一面(2026-06-08)·面经深度解析
  • 汕头项目经理,高考后干了3年工地,最后选了室内设计培训,现在自己接项目
  • 如何在AI+iPaaS平台上创建自动化工作流?
  • 【JAVA毕设源码分享】基于springboot综合性旅游服务系统(程序+文档+代码讲解+一条龙定制)
  • Agent与工具调用 - 问题与解决方案
  • LeetCode 128 最长连续序列:从暴力枚举到 O (n) 最优解法全解析
  • 硅谷AI泡沫下:创始人、投资人、工程师各有押注,泡沫逼出五个新判断
  • 食品里虫子尸体投诉赔偿谈不拢,品牌口碑管理里异物处理SOP怎么执行
  • webrtc 音频模块FEC模块
  • 宝塔和云效webhook配置
  • Typora插件开发指南:打造专属IDE式写作环境
  • 涡喷发动机及其延伸应用(二)
  • 01-PyTorch加载数据初认识(dataset运用)
  • 端口协议和rtl的对应
  • 英国首相计划下周宣布新政策:禁止16岁以下儿童用社交媒体,防儿童收发裸照
  • 售价64.99美元!OtterBox Sole系列保护壳升级,可收纳小物件
  • GoF设计模式——桥接模式
  • 互联网大厂 Java 求职面试实录:从音视频场景到微服务的探讨