示例说明: 单击按钮时,显示“Button Clicked!”警报首先显示,因为该事件是在按钮上触发的。之后,事件“冒泡”到父 div,您会看到“Parent Div Clicked!”警报。这是因为事件从按钮开始,然后上升到其父级 div。所以,这个传播过程被称为“事件冒泡”。

事件捕捉

事件捕获是冒泡的逆过程。该事件从网页顶部(从文档开始)开始,向下移动到您与之交互的元素。这意味着父元素的事件处理程序将首先被触发,并且事件将向下移动到您单击或与之交互的子元素。

Parent Div

在这种情况下,当您单击按钮时,“Parent Div Clicked!”警报将首先显示。然后,“按钮被点击!”之所以会显示警报,是因为事件从文档级别开始,首先捕获(滴流)到父 div,然后到达按钮。

addEventListener的第三个参数的值为true是捕获阶段的决定因素。

每个事件都会经历 3 个阶段

当然,每个事件都会经历所有三个阶段:

所以,是的,事件自然会经历所有三个阶段,但是 JavaScript 可以让您控制事件侦听器将执行的阶段。

即使事件经历所有三个阶段,JavaScript 的事件监听器默认情况下附加到冒泡阶段。这意味着当您添加事件监听器而不指定任何内容时,它将仅在冒泡阶段监听事件(在事件到达目标并开始向上移动之后)。

当您传递 true 作为第三个参数时,您告诉 JavaScript 在捕获阶段

监听事件(当它沿着 DOM 传播时)。事件仍然会经历所有阶段(捕获、目标和冒泡),但监听器将在事件到达目标元素之前的捕获阶段被触发。

使用 true 时事件是否从捕获变为冒泡?不,事件

总是通过捕获和冒泡移动。当你传递 true 时,你并没有阻止冒泡阶段。您只是告诉听众在捕获期间做出响应。事件将从捕获到目标继续,然后像往常一样冒泡。

概括

","image":"http://www.luping.net/uploads/20240930/172769184566fa7c4558a6e.jpg","datePublished":"2024-11-08T17:35:33+08:00","dateModified":"2024-11-08T17:35:33+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 事件冒泡和捕获 - 像 5 岁一样学习

事件冒泡和捕获 - 像 5 岁一样学习

发布于2024-11-08
浏览:781

Event Bubbling and Capturing - Learn like you are 5

来吧,“像五岁一样学习”只是一个短语——我不是在这里讲一个玩具故事!但我保证,如果你从头到尾仔细阅读,一切都会有意义。

事件冒泡和捕获是在 JavaScript 中触发事件时事件如何通过 DOM(文档对象模型)传播(或传播)的两个阶段。现在,这个说法需要澄清事件传播的概念。

事件传播

当某个元素(例如 div 内的按钮)上发生事件时,该事件不仅仅发生在该按钮上。事件在 DOM 中传播的过程称为事件传播。这个过程分为两个主要阶段:

  • 事件捕获(也称为“trickling”)

  • 事件冒泡

现在,我希望你明白了。让我们通过示例来理解两者。

事件冒泡

事件冒泡是指当某个元素上发生事件时,它首先触发该元素的事件处理程序。然后,它在 DOM 树中向上移动,触发其父元素的事件处理程序,依此类推,直到到达文档或 DOM 树的根。

Parent Div

示例说明: 单击按钮时,显示“Button Clicked!”警报首先显示,因为该事件是在按钮上触发的。之后,事件“冒泡”到父 div,您会看到“Parent Div Clicked!”警报。这是因为事件从按钮开始,然后上升到其父级 div。所以,这个传播过程被称为“事件冒泡”。

事件捕捉

事件捕获是冒泡的逆过程。该事件从网页顶部(从文档开始)开始,向下移动到您与之交互的元素。这意味着父元素的事件处理程序将首先被触发,并且事件将向下移动到您单击或与之交互的子元素。

Parent Div

在这种情况下,当您单击按钮时,“Parent Div Clicked!”警报将首先显示。然后,“按钮被点击!”之所以会显示警报,是因为事件从文档级别开始,首先捕获(滴流)到父 div,然后到达按钮。

addEventListener的第三个参数的值为true是捕获阶段的决定因素。

每个事件都会经历 3 个阶段

当然,每个事件都会经历所有三个阶段:

  • 捕获阶段:事件从顶部(文档)开始,向下到达目标。

  • 目标阶段:事件到达您与之交互的元素(目标)。

  • 冒泡阶段:到达目标后,事件通过父元素向上冒泡。

所以,是的,事件自然会经历所有三个阶段,但是 JavaScript 可以让您控制事件侦听器将执行的阶段。

即使事件经历所有三个阶段,JavaScript 的事件监听器默认情况下附加到冒泡阶段。这意味着当您添加事件监听器而不指定任何内容时,它将仅在冒泡阶段监听事件(在事件到达目标并开始向上移动之后)。

当您传递 true 作为第三个参数时,您告诉 JavaScript 在捕获阶段

监听事件(当它沿着 DOM 传播时)。事件仍然会经历所有阶段(捕获、目标和冒泡),但监听器将在事件到达目标元素之前的捕获阶段被触发。

使用 true 时事件是否从捕获变为冒泡?不,事件

总是通过捕获和冒泡移动。当你传递 true 时,你并没有阻止冒泡阶段。您只是告诉听众在捕获期间做出响应。事件将从捕获到目标继续,然后像往常一样冒泡。

概括

  • 所有事件都会自然地经历捕获、目标和冒泡阶段

  • 默认情况下,事件监听器在冒泡阶段工作

    (事件到达目标并向上移动之后)。

  • 当您传递 true 时,您将告诉事件侦听器在捕获阶段
  • (当事件向下传播时)触发

  • 事件仍然会经历所有阶段(捕获、目标和冒泡),但您的侦听器决定在哪个阶段执行操作。
版本声明 本文转载于:https://dev.to/abeertech01/event-bubbling-and-capturing-learn-like-you-are-5-4i48?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-03-11
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-03-11
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-03-11
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-03-11
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-03-11
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-03-11
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-03-11
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-03-11
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-03-11
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-03-11
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-03-11
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-03-11
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。让我们考虑以下查询: select data d.data_ti...
    编程 发布于2025-03-11
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-03-11

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3