2024-01-11 00:15:52
以下事件在DOM事件模型中不会冒泡:
1、focus事件
当元素(如输入框)通过鼠标点击或脚本设置获得焦点时,不会向父元素传播。仅当通过Tab键切换焦点或脚本直接操作时触发,且传播机制被限制在目标元素内。
2、blur事件
与focus事件相反,当元素失去焦点时(如点击其他区域或Tab切换),不会触发父元素的blur处理程序。其传播范围同样仅限于目标元素本身。
3、scroll事件
滚动行为(如页面或滚动条移动)不会向上传递至父容器。即使嵌套多个可滚动区域,每个元素的滚动事件独立触发,父元素无法捕获子元素的滚动行为。
4、mouseenter与mouseleave事件
鼠标指针进入或离开元素时触发,忽略子元素的影响。例如,鼠标从父元素直接进入子元素时,父元素的mouseleave不会触发,与会冒泡的mouseover/mouseout形成对比。
5、mousemove事件
虽然鼠标移动频繁触发,但仅在目标元素内生效。若鼠标在子元素内移动,父元素的mousemove处理程序不会响应,除非子元素未绑定该事件。
6、keypress事件
键盘按键按下并生成可打印字符时触发,不会传递至父元素。与keydown/keyup不同,keypress的冒泡行为被明确禁止,需直接绑定至目标元素。
7、beforeunload事件
窗口或标签页关闭前触发,仅作用于当前文档。父窗口或iframe无法通过冒泡机制捕获子页面的beforeunload事件,需通过其他通信方式实现。
8、DOMContentLoaded事件
HTML解析完成时触发,不依赖外部资源加载状态。该事件仅针对当前文档,无法通过冒泡传递至父框架或窗口。
9、cut、copy与paste事件
用户执行剪切、复制或粘贴操作时触发,传播范围限于触发操作的元素。例如,在输入框内粘贴内容时,父元素无法通过冒泡捕获该事件。
补充说明
虽然上述事件不冒泡,但可通过事件捕获阶段或直接绑定(如element.addEventListener(event, handler, true))实现类似效果。此外,部分事件(如mouseover/mouseout)虽会冒泡,但行为与mouseenter/mouseleave存在差异,需根据场景选择合适的事件类型。