事件冒泡与捕获
一、事件流基础:事件冒泡与捕获的起源
- 事件流概念
- 事件发生时在DOM节点上的传播顺序,触发一个节点的事件会连锁触发相关节点的事件。
- 两种对立模型
- 事件捕获(微软提出):事件从文档根节点(如
document)开始,逐级向目标节点传播,父节点先于子节点触发事件。 - 事件冒泡(网景提出):事件从目标节点开始,逐级向根节点传播,子节点先于父节点触发事件。
- 事件捕获(微软提出):事件从文档根节点(如
- W3C统一模型
- 采用“先捕获后冒泡”的流程:事件先从根节点捕获到目标节点(捕获阶段),再从目标节点冒泡回根节点(冒泡阶段)。
二、事件捕获(Event Capturing)
- 传播顺序
- 从DOM树顶层(如
document→html→body)逐步向下到目标节点。 - 例:点击
<a>标签时,捕获顺序为document→div→p→a。
- 从DOM树顶层(如
- 绑定事件方法
- 使用
addEventListener,第三个参数设为true:
element.addEventListener("click", handler, true); // 捕获阶段触发 - 使用
三、事件冒泡(Event Bubbling)
- 传播顺序
- 从目标节点开始,逐级向上到根节点。
- 例:点击
<a>标签时,冒泡顺序为a→p→div→body→document。
- 绑定事件默认行为
addEventListener第三个参数默认false(冒泡阶段触发),或直接使用onclick等属性绑定(默认冒泡):
element.addEventListener("click", handler); // 等价于传入false,冒泡阶段触发 element.onclick = handler; // 默认冒泡阶段触发
四、阻止事件传播
- 阻止捕获和冒泡
event.stopPropagation():终止事件在捕获和冒泡阶段的传播,后续节点的事件不再触发,但不影响当前节点的其他事件处理程序。
- 阻止同一节点的后续事件
event.stopImmediatePropagation():不仅阻止传播,还会中断当前节点上同一事件的其他事件处理程序执行(即使已绑定的事件)。
五、阻止默认事件行为
- 方法
event.preventDefault():取消事件的默认行为(如链接跳转、表单提交等)。- 兼容性:IE9及以下不支持,需用
event.returnValue = false替代。
- 示例
// 阻止链接跳转 link.addEventListener("click", function(event) {event.preventDefault(); // 标准浏览器event.returnValue = false; // IE9及以下兼容 });
六、核心知识点对比
| 特性 | 事件捕获 | 事件冒泡 |
|---|---|---|
| 传播方向 | 根节点 → 目标节点 | 目标节点 → 根节点 |
| 绑定参数 | addEventListener(..., true) | addEventListener(..., false)(默认) |
| 典型应用 | 全局事件监听(如点击空白处关闭弹窗) | 事件代理(通过父节点统一处理子节点事件) |
| 阻止方法 | 作用 |
|---|---|
stopPropagation() | 阻止事件向父/子节点传播 |
stopImmediatePropagation() | 阻止传播并中断当前节点同事件的后续处理 |
preventDefault() | 阻止事件默认行为(如表单提交、链接跳转) |
总结
- 事件流流程:先捕获(根→目标),后冒泡(目标→根)。
- 事件绑定:通过
addEventListener的第三个参数控制阶段(true=捕获,false=冒泡)。 - 事件控制:
stopPropagation()阻止传播,preventDefault()阻止默认行为,stopImmediatePropagation()额外中断同节点事件。 - 应用场景:捕获适合全局控制,冒泡适合事件代理(减少内存占用),阻止方法用于避免事件干扰。
相关文章:
事件冒泡与捕获
一、事件流基础:事件冒泡与捕获的起源 事件流概念 事件发生时在DOM节点上的传播顺序,触发一个节点的事件会连锁触发相关节点的事件。 两种对立模型 事件捕获(微软提出):事件从文档根节点(如document&#…...
《AI大模型应知应会100篇》第27篇:模型温度参数调节:控制创造性与确定性
第27篇:模型温度参数调节:控制创造性与确定性 摘要 在大语言模型的使用中,“温度”(Temperature)是一个关键参数,它决定了模型输出的创造性和确定性之间的平衡。通过调整温度参数,您可以根据任…...
聊聊Doris的数据模型,如何用结构化设计解决实时分析难题
传统 OLAP 系统的局限 在大数据实时分析领域,数据模型设计直接决定了系统的查询性能、存储效率与业务适配性。Apache Doris作为新一代MPP分析型数据库,通过独创的多模型融合架构,在业内率先实现了"一份数据支持多种分析范式"的能力…...
LNA设计
设计目的 为后级提供足够的增益以克服后级电路噪声 尽可能小的噪声和信号失真 确保输入和输出端的阻抗匹配 确保信号线性度 评价标准 噪声系数 功率增益 工作频率和带宽 输入信号功率动态范围 端口电压驻波比 稳定性 基于SP模型的LNA设计 直流分析 S参数分析 设计指标 …...
小红书爬虫,小红书api,小红书数据挖掘
背景: 小红书(Xiaohongshu)是一款结合社交、购物和内容分享的移动应用,近年来在中国以及全球范围内拥有大量的用户群体。小红书上的内容包括用户的消费体验、生活方式、旅行分享、时尚搭配等。通过这些内容,用户可以了…...
C++ STL 环形队列模拟实现
C STL 环形队列模拟实现 下面是一个使用C STL实现的环形队列(Circular Queue)的完整示例: #include <iostream> #include <vector> #include <stdexcept>template <typename T> class CircularQueue { private:std…...
C++中unique_lock和lock_guard区别
目录 1.自动锁定与解锁机制 2.灵活性 3.所有权转移 4.可与条件变量配合使用 5.性能开销 在 C 中,std::unique_lock 和 std::lock_guard 都属于标准库 <mutex> 中的互斥锁管理工具,用于简化互斥锁的使用并确保线程安全。但它们存在一些显著区别…...
Vue 3 组合式 API 规范配合 Pinia
实现效果: 根据pinia中存储的不同状态, 点击不同的按钮,切换不同的弹窗和标题1. Pinia Store(组合式写法) // stores/dataStore.ts import { defineStore } from pinia import { reactive } from vuetype DialogType …...
JavaSpring 中使用 Redis
创建项目 配置 Redis 服务地址 创建 Controller 类 由于当前只是些简单的测试代码,所以就不进行分层了,只创建一个 Controller 来实现 jedis 通过 jedis 对象里的各种方法来操作 Redis 此处通过 StringRedisTemplate 来操作 Redis 最原始提供的类是 Re…...
多线程使用——线程安全、线程同步
一、线程安全 (一)什么是线程安全问题 多个线程,同时操作同一个共享资源的时候,可能会出现业务安全的问题。 (二)用程序摹拟线程安全问题 二、线程同步 (一)同步思想概述 解决线…...
Spring Boot 集成 tess4j 实现图片识别文本
tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。 Tess4J是…...
JAVA IO、BIO、NIO、AIO及零拷贝
概述 IO,常写作 I/O,是 Input/Output 的简称,是 Input/Output 的简称,即输入/输出。通常指数据在内部存储器(内存)和外部存储器(硬盘、优盘等)或其他周边设备之间的输入和输出。 目前有三种 IO 共存。分别是 BIO、NIO 和 AIO。 BIO 全称 Block-IO 是一种同步且阻塞的…...
Redis命令——list
列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素(element),⼀个列表最多可以存储个元素 在 Redis 中,可以对列表两端插入(push)和弹出(pop),…...
MicroDEM 与 OpenEV(FWTtools工具包):两款开源DEM相关小软件
大家好,今天为大家介绍的软件是MicroDEM 与 OpenEV,这两款小软件分别主要用于DEM数据的处理、数据查看与分析。MICRODEM是一款专注于地理空间分析和遥感数据处理的开源小软件。 MICRODEM官网网址为:https://microdem.org/,官网比较…...
大学英语四级选词填空阅读题和段落匹配解析
Leisure and well - being休闲和幸福 The vital role of leisure in enhancing well - being休闲在增进福祉方面的重要作用 A) The perception of leisure activities has a significant impact on the mental health advantages they offer. 对休闲活动的看法对其提供的心理…...
STM32使用rand()生成随机数并显示波形
一、随机数生成 1、加入头文件:#include "stdlib.h" 2、定义一个用作生成随机数种子的变量并加入到滴答定时器中不断自增:uint32_t run_times 0; 3、设置种子:srand(run_times);//每次生成随机数前调用一次为佳 4、生成一个随…...
大语言模型智能体:安全挑战与应对之道
在当今科技飞速发展的时代,大语言模型驱动的智能体正逐渐融入我们生活和工作的方方面面,给我们带来了诸多便利。但与此同时,它们的安全问题也引起了广泛的关注。今天,咱们就一起来深入了解一下可信大语言模型智能体所面临的安全挑…...
每日OJ_牛客_kotori和素因子_DFS_C++_Java
目录 牛客_kotori和素因子_DFS 题目解析 C代码 Java代码 牛客_kotori和素因子_DFS kotori和素因子 描述: kotori拿到了一些正整数。她决定从每个正整数取出一个素因子。但是,kotori有强迫症,她不允许两个不同的正整数取出相同的素因子…...
Vue 开发实战:从入门到精通的经验之谈
零基础入门 Vue,10 分钟快速上手教程 一、初识 Vue二、搭建 Vue 开发环境,迈开第一步 Vue 核心概念大揭秘,响应式系统原来是这么回事儿三、Vue 核心概念:响应式系统 模板语法与表达式,玩转 Vue 就靠它啦四、模板语法与…...
快手OneRec 重构推荐系统:从检索排序到生成统一的跃迁
文章目录 1. 背景2. 方法2.1 OneRec框架2.2 Preliminary2.3 生成会话列表2.4 利用奖励模型进行迭代偏好对齐2.4.1 训练奖励模型2.4.2 迭代偏好对齐 3. 总结 昨天面试的时候聊到了OneRec,但是由于上次看这篇文章已经是一个月之前,忘得差不多了,…...
c# 简单实现将Message的内容保存到txt中,超过100个则清理旧文件
using System; using System.IO; using System.Threading;public static class LogManager {private static readonly object _fileLock new object(); // 线程安全锁private const int MaxFiles 100; // 最大文件数限制private const string LogDire…...
精打细算 - GPU 监控
精打细算 - GPU 监控 在上一篇,咱们历经千辛万苦,终于让应用程序在 Pod 的“驾驶舱”里成功地“点火”并用上了 GPU。太棒了!但是,车开起来是一回事,知道车速多少、油耗多少、引擎水温是否正常,则是另一回事,而且同样重要,对吧? 我们的 GPU 应用跑起来了,但新的问题…...
软件测试的页面交互标准:怎样有效提高易用性
当用户遇到"反人类"设计时 "这个按钮怎么点不了?"、"错误提示完全看不懂"、"我输入的内容去哪了?"——这些用户抱怨背后,都指向同一个问题:页面交互的易用性缺陷。作为软件测试工程师&a…...
共享单车出行规律与决定因素的空间交互分析——以北京六大区为例
共享单车出行规律与决定因素的空间交互分析——以北京六大区为例 原文:Spatial Interaction Analysis of Shared Bicycles Mobility Regularity and Determinants: A Case Study of Six Main Districts, Beijing 这篇文章主要研究了北京六个主要城区共享单车的流动…...
Windows上安装FFmpeg的详细指南
1.下载FFmpeg 访问FFmpeg官方下载页面:https://ffmpeg.org/download.html 点击"Windows builds from gyan.dev"或"Windows builds by BtbN" gyan.dev版本:https://www.gyan.dev/ffmpeg/builds/ BtbN版本:https://githu…...
React-在使用map循环数组渲染列表时须指定唯一且稳定值的key
在渲染列表的时候,我们须给组件或者元素分配一个唯一值的key, key是一个特殊的属性,不会最终加在元素上面,也无法通过props.key来获取,仅在react内部使用。react中的key本质是服务于diff算法, 它的默认值是null, 在diff算法过程中…...
Nodejs数据库单一连接模式和连接池模式的概述及写法
概述 单一连接模式和连接池模式是数据库连接的两种主要方式: 单一连接模式: 优点:实现简单,适合小型应用缺点:每次请求都需要创建新连接,连接创建和销毁开销大,并发性能差,容易出…...
作业2 CNN实现手写数字识别
# 导入必要库 import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 用于高级可视化 from tensorflow import keras from tensorflow.keras import layers from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay import time # 用于…...
整流二极管详解:原理、作用、应用与选型要点
一、整流二极管的基本定义 整流二极管是一种利用PN结单向导电性将交流电(AC)转换为直流电(DC)的半导体器件。其核心特性是正向导通、反向截止,允许电流仅沿单一方向流动。 典型结构:硅材料(正向…...
WordPress自定义页面与文章:打造独特网站风格的进阶指南
文章目录 引言一、理解WordPress页面与文章的区别二、主题与模板层级:自定义的基础三、自定义页面模板:打造专属页面风格四、自定义文章模板:打造个性化文章呈现五、使用自定义字段和元数据:增强内容灵活性六、利用WordPress钩子&…...
