javascript中事件监听器的顺序是如何确定的?

2023-12-06

假设有一个包含链接(a href)的 div,并且有三个事件侦听器 - on-click - 1)针对整个页面,2)针对 div 3)标签。如果用户点击a标签,监听器是如何触发的?它们的注册顺序是什么?


本质上,这取决于。事件有两个阶段:捕获(首先发生),文档向下,冒泡,元素向上。

JS 可以做到这两点,这就是为什么在创建一个自定义事件监听时你有第三个布尔变量,例如

parent.addEventListener('click',doSomething2,true) child.addEventListener('click',doSomething,false)

如果它的最后一个参数为 true,则为捕获阶段设置事件处理程序,如果为 false,则为冒泡阶段设置事件处理程序。

回头参考示例代码并引用这一页:

如果用户单击子元素,则会发生以下情况:

  1. 点击事件在捕获阶段开始。该事件会查找 child 的任何祖先元素是否具有用于捕获阶段的 onclick 事件处理程序。

  2. 该事件在家长身上找到了一个。 doSomething2() 被执行。

  3. 事件向下传播到目标本身,没有找到更多用于捕获阶段的事件处理程序。事件进入冒泡阶段并执行 doSomething(),该事件在冒泡阶段注册到子级。

  4. 该事件再次向上传播并检查目标的任何祖先元素是否具有用于冒泡阶段的事件处理程序。事实并非如此,所以什么也没有发生。

我上面链接的页面包含更多信息,但希望这能回答基本问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript中事件监听器的顺序是如何确定的? 的相关文章

随机推荐

  • .net实体框架与oracle 11g

    我正在将实体框架与 Oracle 提供程序 Oracle ManagedDataAccessDTC 一起使用 从 Visual Studio 运行一切正常 但是当我将其发布到 IIS 时 我收到连接错误异常 这是我的 webconfig 女
  • 使用 dplyr 从数据帧中采样子组行

    如果我想从不同组中随机选择一些样本 我使用 plyr 包和下面的代码 require plyr sampleGroup lt function df size df sample nrow df size size iris sample
  • 跟踪 Android 应用程序内的用户空闲时间

    据我所知 没有系统API可供我获取用户空闲时间 当我说用户空闲时间时 我的意思是用户在我的应用程序内的触摸屏上进行一些交互 因此 我想自己跟踪它 我想到的方法是扩展Activity并覆盖onuserinteraction方法来保存最后用户活
  • 图像上传后,React Native 中仅 iOS 的图像 uri 为空

    在我的 React Native 应用程序中 我添加了上传多个图像的功能 这些图像将存储为 image 包括 uri 这对于 Android 来说非常有效 但对于iOS来说 创建的image 也包含一些数据 但与android完全不同 对于
  • 从“.exe”中删除调试信息[重复]

    这个问题在这里已经有答案了 如果我将 C 程序 exe 放入文本编辑器中 我可以在其中找到调试信息 我怎样才能删除它 编辑 我不关心 pdb 文件 我只关心可执行文件中有 pdb 文件的路径 该路径包含我的名字 在本例中是巧合 我的问题是如
  • 如何在.NET Core 3.1中的Newtonsoft JsonConverter中注入依赖

    我无法让依赖注入在 NET Core 3 1 中为以下 Newtonsoft JsonConverter 工作 我只想在属性级别使用它 而不是在全局级别使用它 因此 只有当指定的属性来自某个类时才应执行 JsonConverter publ
  • 如何通过 SQL 将计算列添加到 Access

    如何在 SQL 中向 Access 表添加计算列 我知道我可以使用 SQL 添加一列 如下所示 ALTER TABLE Clients ADD COLUMN AccountDate TEXT 60 谢谢 维托尔 您无法使用 SQL 添加计算
  • Jackson 的 JsonIgnore

    JsonIgnore 注释似乎对我不起作用 有什么想法吗 public class JsonTest implements Serializable JsonIgnore private static JsonTest instance n
  • 在最新的 64 位 Intel CPU 上,如何在没有隐式锁的情况下与寄存器交换堆栈顶部?

    x64 调用约定使用寄存器最多前 4 个参数 rcx rdx r8 r9 并将其余参数传递到堆栈上 在这种情况下 处理补充参数的明显方法是asm程序如下 procedure example param1 rcx param2 rdx par
  • 使用 ItextSharp 验证数字签名

    我正在尝试使用 iTextSharp 验证 C 中的数字签名 我按照 iText 网络中的示例进行操作 http gitlab itextsupport com itextsharp tutorial blob master signatu
  • iPhone 使用 NSURLConnection 发送 POST

    我在使用 NSURLConnection 将 POST 数据发送到 PHP 脚本时遇到一些问题 这是我的代码 const char bytes NSString stringWithFormat n
  • 两个表之间最近点的唯一分配

    In my Postgres 9 5数据库与邮政地理信息系统2 2 0安装后 我有两个带有几何数据 点 的表 我想将一个表中的点分配给另一个表中的点 但我不想要buildings gid被分配两次 只要一buildings gid已分配 不
  • 颤动中的自定义 Sliver 应用栏,其中一个图像和 2 个文本小部件在滚动时进入应用栏

    我想实现条子应用程序栏 如下面的两张图片所示 经过多次谷歌搜索后 我发现了CustomScrollView小部件和SliverAppBar但是所有关于条子应用程序栏的在线教程和博客都显示了一个简单的小部件 其中图像消失在应用程序栏中 并在滚
  • 从 IPython Notebook 中的日志记录模块获取输出

    当我在 IPython Notebook 中运行以下命令时 我没有看到任何输出 import logging logging basicConfig level logging DEBUG logging debug test 有人知道如何
  • php从字符串调用数组

    我有一个包含数组元素的字符串 str some string array array 我怎样才能得到的值 array some string using str 这适用于任意数量的键 keys explode substr str 1 1
  • 实体框架按主键过滤

    我正在编写一个通用的 CRUD 服务 我正在尝试实现Get方法与可选的虚拟方法来包含属性但是我遇到了一些麻烦 因为FindAsync仅在 a 上声明DbSet public async virtual Task
  • 当 JVM 在 GC 中花费时间时,Thread Dump 是什么样子的

    在分析 Java 应用程序时 我注意到一个有趣的事实 当 JVM 处于 GC 死亡螺旋时 线程转储如下所示 1304802943 qtp 393978767 9985 prio 10 tid 0x00007f3ed02dd000 nid 0
  • mendeley Python SDK中的身份验证问题

    我正在阅读 Mendeley 文档here 我正在尝试在我的控制台中获取数据 我正在使用教程中的以下代码 from mendeley import Mendeley These values should match the ones su
  • 检查半透明导航是否可用

    如何检查半透明导航是否可用 我目前将其设置为半透明 if Build VERSION SDK INT gt Build VERSION CODES KITKAT translucentNavigation true Window w get
  • javascript中事件监听器的顺序是如何确定的?

    假设有一个包含链接 a href 的 div 并且有三个事件侦听器 on click 1 针对整个页面 2 针对 div 3 标签 如果用户点击a标签 监听器是如何触发的 它们的注册顺序是什么 本质上 这取决于 事件有两个阶段 捕获 首先发