事件处理程序和侦听器以及事件冒泡和事件捕获

2023-12-05

我对 JavaScript 中的“事件监听器”、“事件处理程序”、“事件冒泡”和“事件捕获”感到困惑。

我在互联网上搜索并查看了不同的网站,但是,我仍然无法理解一些差异,甚至基本条件。

As 本文表明,事件处理程序已创建并侦听事件。

  • 这是否意味着附加到 DOM 内元素的 JavaScript 函数不是事件处理程序,而是事件侦听器?

Also, here我发现了“事件冒泡”和“事件捕获”之间的区别。另外,我前段时间读到过dojo所有事件都被捕获<body> tag.

  • 这是否意味着 DOM 内的其余元素没有附加 JavaScript?

  • 更准确地说,如果事件将由父级通过“事件冒泡”处理,则无需为子级添加侦听器,这是真的吗?

这些术语背后的确切定义是什么?


事件处理程序/事件监听器

事件侦听器和事件处理程序之间没有区别 - 出于所有实际目的,它们是相同的东西。但是,以不同的方式思考它们可能会有所帮助:

我可以定义一个“处理程序”......

function myHandler( e ){ alert('Event handled'); }

...并使用“addEventListener”将其附加到多个元素:

elementA.addEventListener( 'click', myHandler );
elementB.addEventListener( 'click', myHandler, true );

或者,我可以将我的“处理程序”定义为“addEventListener”中的闭包:

elementC.addEventListener( 'click', function( e ){ alert('Event Handled'); } );

事件捕获/事件冒泡

您可以将事件捕获视为事件冒泡的对立面 - 或者视为事件生命周期的两半。 DOM 元素可以嵌套(当然)。先来个活动CAPTURES从最外层的父级到最内层的子级,然后BUBBLES从最里面的孩子到最外面的父母。

您可能已经注意到,在上面的示例中,附加到 elementB 的侦听器有一个附加参数 - true - 不会传递给 elementA。这告诉侦听器响应事件CAPTURE阶段,而它会响应BUBBLE默认阶段。在 jsfiddle.net 上尝试一下:

假设我们有 3 个嵌套的 div 元素:

<div id="one">
    1
    <div id="two">
        2
        <div id="three">
            3
        </div>
    </div>
</div>

...我们为每个附加一个“点击”处理程序:

document.getElementById('one').addEventListener( 'click', function(){ alert('ONE'); } );
document.getElementById('two').addEventListener( 'click', function(){ alert('TWO'); }, true );
document.getElementById('three').addEventListener( 'click', function(){ alert('THREE') } );

如果单击“1”,您将看到一个带有文本“ONE”的警告框。

如果单击“2”,您将看到一个警报框“TWO”,然后是一个警报框“ONE”(因为“two”在捕获阶段,并且“一”在返回过程中被触发气泡相)

如果您单击“3”,您将看到一个警告框“TWO”(CAPTURED),然后是警报框“三”(BUBBLED),然后是警报框“ONE”(BUBBLED).

清澈如泥,对吧?

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

事件处理程序和侦听器以及事件冒泡和事件捕获 的相关文章

  • jQuery 的 css() 在应用于滚动事件时滞后

    我正在尝试实现一个简单的 固定标题 表 我知道这在理论上只能用 CSS 来完成 但是当涉及到 OSX Lion 及其消失的滚动条时 它效果不佳 所以我用 jQuery 来做 方法很简单 只有1 5行代码 inbox scroll funct
  • 是否可以将反应组件导出为非反应项目中的函数

    有没有办法在非 React 项目中将 React 组件导出为函数并传入 props 作为函数的参数 我最近用 create react app 完成了一个 React 项目 现在我想将它用于其他非 React 项目 纯 Javascript
  • 是否可以覆盖 javaScript 原始数据类型?

    问题是不言自明的 我知道可以扩展原始数据类型 例如string但有可能覆盖它吗 这是在采访中被问到的一个问题 不 你不能覆盖任何东西 Ecma脚本定义原始类型 http es5 github com x4 3 2 Undefined Nul
  • Jquery:如何隐藏或关闭所有打开的引导工具提示

    这样我就可以从我的验证函数中显示引导工具提示 var options html true placement bottom title div class tooltip alert alert danger message div inp
  • Telegram 授权无默认按钮

    使用 Telegram 第 3 方授权的唯一有记录的方法是使用其提供的脚本https core telegram org widgets login https core telegram org widgets login 这个脚本 正如
  • 如何在 Bootstrap 3 中制作进度条动画?

    我正在尝试为 Bootstrap 进度条设置动画 但我不知道该怎么做 我得到了宽度的值但是console log bar width 返回宽度px但不是 如内联所示style width 90 我用代码重新创建了一个 bootply Boo
  • 使用 jquery 和 php 测试表单输入是否为 1 或 2 位整数

    我有一个表单 其中有五个字段全部设置为 maxlength 2 基本上 我希望唯一可以输入的值是一位或两位整数 因为在将值存储在数据库中之前对这些字段执行计算 是否有任何 jquery 不允许用户输入不是整数的值 另外 用 jquery 和
  • 使用 Javascript / Jquery 的本地存储(不使用 HTML5)

    我想在 javascript 或 jquery 中复制本地存储概念 类似于 HTML5 但不幸的是我不知道如何开始 任何人都可以建议如何使用 javascript 或 jquery 实现本地存储 不使用 HTML5 这是一个有点愚蠢的差事
  • 使用 jQuery 仅从字符串末尾修剪空格

    我知道 jQuery trim 函数 但我需要的是一种仅从字符串末尾修剪空格的方法 而不是开头 So str this is a string 会成为 str this is a string 有什么建议么 Thanks 您可以使用正则表达
  • setInterval 内的返回值

    我想在 setInterval 内返回一个值 我只想以一定的时间间隔执行一些操作 这就是我尝试过的 function git limit var i 0 var git setInterval function console log i
  • 将 NPM 包客户端与 nuxt 结合使用

    我对 nuxt 和 javascript 非常陌生 我正在尝试弄清楚如何在客户端使用我的应用程序的依赖项 我将它们列在我的 nuxt config js 中并使用 npm 安装 我也有一个文件 plugins导入它们的目录 不确定这是否好
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • Window 与 Var 声明变量[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • 元素中优先考虑 ngclick 而非 nghref

    tl dr 如何强制 Angular 只执行 ngclick 指令 a 元素而不清空 删除href 我的网站在某些元素上有一些自定义行为 模式打开 位置栏更新等 但对于 SEO 索引我also需要它成为一个 a 元素与href包含有效链接的
  • 如何在 angularjs 中修剪()字符串?

    有角度特定的方法吗 如果没有 我应该使用内置的jquery 来做到这一点吗 如果我应该使用内置的jquery 如何在不使用 的情况下访问trim 函数 或者这是必要的 编辑 是的 我知道 str trim 对不起 我需要这个才能在 IE 8
  • Postman - 如何计算 JSON 响应中特定对象的出现次数

    我是 JSON 和 Postman 的新手 我相信我正在尝试做一些非常简单的事情 我创建了一个 GET 请求 它将获得如下所示的 JSON 响应 在下面的例子中我想得到count响应中所有 IsArchived 属性 这些属性的数量因响应而
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 在声明组件选择器时添加指令 - Angular 7

    我正在学习 Angular 并通过单击按钮动态创建组件 我正在尝试使用 Angular Material 的拖放功能来拖动这些创建的组件以对它们进行排序 我的基本组件 html 中有以下代码 div style margin 20px di
  • 使用 React React-router 登录后重定向到主页,并且 usenavigate 不起作用?

    我希望用户在成功登录后重定向到主页 我将用户登录的 api 请求的数据存储在一个名为 currentUser 的变量中 因此如果 currentUser 为 true 它应该重定向到主页 这就是我处理登录请求的方式 export const
  • Serviceworker Bug event.respondWith

    我的 serviceworker 的逻辑是 当发生获取事件时 它首先获取包含一些布尔值 而不是 event request url 的端点 并根据我正在调用的值检查该值event respondWith 对于当前的获取事件 我正在提供来自缓

随机推荐

  • 增加使用数字和字符(也称为 Base36 数字)的索引

    我有一个基于字符串的代码 长度可以是两个或三个字符 我正在寻找一些帮助来创建一个可以增加它的函数 代码的每个 数字 的值为 0 到 9 和 A 到 Z 一些例子 序列中的第一个代码是 000 009 下一个代码是 00A00D 下一个代码是
  • C/C++ 宏而不是 const [重复]

    这个问题在这里已经有答案了 宏观 define MAX 80相当于const int MAX 80 两者都是恒定的 不能修改 使用宏而不是常量不是更好吗 常量整数占用内存 宏的名称被预处理器替换为其值 对吗 所以不需要内存 为什么我要使用
  • 修复有问题的 unicode 字符串

    有错误的 unicode 字符串是指其中意外编码了字节的字符串 例如 Text Windows 1255 编码 x99 x8c x85 x8d 统一码 u u05e9 u05dc u05d5 u05dd 有问题的 Unicode u x99
  • EDSDK 回调不起作用

    我有一个可用的命令行应用程序 使用 EDSDK v2 13 但是 当我注册回调时 会出现一系列属性事件 然后就什么也没有了 我已经纠正了这个循环 如下所示 while kbhit EdsOpenSession camera Sleep 10
  • 使用自定义 data-id 加载模态

    我的一个网站有问题 我有一些这样的列表链接 ul li a Room 10 a li li a Room 20 a li ul On my myModal 我希望表单出现编辑信息 所以我通过了data id 这是我数据库中的 id HTML
  • 在 PrimeFaces 的文件上传侦听器中验证上传图像的尺寸

    我正在使用上传图像
  • Cakephp 中的 WordPress

    我已经在 Cakephp 中安装了 WordPress app webroot blog 文件夹并将 WordPress 永久链接设置更改为月份和名称 例如 http abc com blog 2013 02 sample post 现在
  • 当文件确实存在时,C# System.IO.FileNotFoundException

    我正在尝试从 ASP NET Core 中的操作返回文件 public IActionResult GetFile string filePath return File home me file png application octet
  • Jqgrid。从键值中找到rowId

    我有一个基本的 jqgrid 实现 fsJqGrid jqGrid datatype local height 175 colNames FeatureId Name colModel name FeatureId index Featur
  • IIS7:缓存设置不起作用...为什么?

    我的 IIS7 web config 设置为以下内容 其中包含静态资产文件夹 不在 ASP NET 应用程序或任何其他内容中
  • ObServer 发出选择性 D-BUS 信号(单播信号)

    我遇到的情况是 我有一个 ObServer 对象和一组客户端 ObServer和客户端通过D BUS IPC 连接 ObServer 为所有客户端提供通用接口 但是 ObServer 有时需要通知客户端一些事件 客户端监听 ObServer
  • Android volley:如何处理错误响应

    我实现了一个带有 volley 库的 Android 应用程序来连接我的数据库 与 get 和 post 请求的连接有效 但服务器响应不起作用 发生这种情况是因为错误响应会自动捕获错误 例如 我的服务器响应代码为 201 表示登录成功 但齐
  • Camel 2.11批量聚合如何与单独的路由一起工作?

    首先有一个类似的未回答的问题将路由加入单个聚合器 我们有一些消费者路由 ftp file smb 从远程系统读取文件 简化了直接路由的测试 但与批量消费者的行为类似 from direct routeId id routeId setPro
  • Rails +omniauth + facebook - 检测到 csrf

    我正在努力通过现有的方式登录网站facebook帐户 所以我注册了一个facebook应用程序并存储api and secret in development rb and production rb文件 然后我用了omniauth fac
  • 如何仅打印python列表中的重复元素[重复]

    这个问题在这里已经有答案了 有没有内置的方法来打印 python 列表中存在的重复元素 我可以为此编写程序 我正在寻找的是是否有任何内置方法或相同的东西 For Ex 用于输入 4 3 2 4 5 6 4 7 6 8 我需要操作4 6 有的
  • 从 MySQL 迁移到 NoSQL 的示例? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 对于类似 Facebook 的网站 即 它是写入密集型并提供用户自定义页面 我想构建一个原型来研究以文档为中心的 NoSQL 架构是否是分片的良好替代方案 并减少单个主服务器 多个从
  • 在 numpy 数组内生成填充多边形

    我正在寻找一种基于一组多边形顶点将填充多边形 绘制 到 numpy 数组中的方法 我宁愿使用尽可能少的外部库 例如 我有一个 20x20 numpy 数组 我希望由点 3 12 8 18 13 14 11 6 和 4 6 界定的区域为填充
  • 错误:allowDefinition='MachineToApplication' 超出应用程序级别

    关于这个主题有大量的 SO 帖子 到目前为止 解决方案似乎是将 IIS 中的目录配置为应用程序 另一个常见的解决方案是从根文件夹中删除备份的 web config 文件 我的问题有所不同 因为我在 IIS Express 上运行 因此无法将
  • 如何从 QML 监听 C++ 信号?

    我有一个我称之为 C 服务 的东西 我想将其接口公开给 QML 我正在尝试使用QQmlContext s setContextProperty将对象链接到 QML 并从QML Connections block QML 不会像之前我没有在
  • 事件处理程序和侦听器以及事件冒泡和事件捕获

    我对 JavaScript 中的 事件监听器 事件处理程序 事件冒泡 和 事件捕获 感到困惑 我在互联网上搜索并查看了不同的网站 但是 我仍然无法理解一些差异 甚至基本条件 As 本文表明 事件处理程序已创建并侦听事件 这是否意味着附加到