如何获取元素的事件监听器

2024-01-18

有没有办法使用 HTML 页面上的 JavaScript 获取该页面上某个元素的所有事件侦听器的列表。

注意:我知道我们可以使用 Chrome 开发工具事件侦听器查看它们,但我想使用页面的 JavaScript 来记录/访问查看列表。

另外,我知道我们可以通过 jQuery 获取它们,但为此,我们还必须使用 jQuery 应用事件,但我想要通用的东西,这样我还可以访问应用于其他元素(例如 Web 组件或 React)的事件侦听器成分。


如果您确实必须这样做,那么执行此操作的一般方法是修补EventTarget.prototype.addEventListener:

const listeners = [];
const orig = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(...args) {
  if (this instanceof HTMLElement) {
    listeners.push({
      type: args[0],
      fn: args[1],
      target: this,
    });
  }
  return orig.apply(this, args);
};

document.body.addEventListener('click', () => console.log('body clicked'));
console.log(listeners[0].fn);
click this body

要查找附加到元素的侦听器,请迭代listeners数组并查找targets 与您要查找的元素相匹配。

为了完整,还要打补丁removeEventListener以便在删除时可以从数组中删除项目。

如果您需要观看通过以下方式附加的听众on,那么你必须执行与上面类似的操作来修补HTMLElement.prototype.onclickgetter/setter,以及您希望能够检测到的每个侦听器。

也就是说,虽然您说您想要一个通用的解决方案,而不是修补内置原型,但最好通过 jQuery 或通过您自己的函数添加侦听器。

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

如何获取元素的事件监听器 的相关文章

  • 检查用户是否连接到 Facebook,然后检查他是否喜欢某个页面

    有没有什么方法可以检查用户是否在我的外部页面上连接到 Facebook 而不让他们允许我的应用程序之一 同样的问题也适用于 检查用户是否喜欢某个页面 我检查了大约 20 个问题和 3 4 个教程 似乎所有问题都在讨论内部脚本 粉丝页面 应用
  • 您可以使用 JavaScript 触发自定义 HTML5 表单错误吗?

    如果我有一个像这样的输入
  • 如何使用 LinkedIn javascript sdk 检索包括所有字段的职位列表?

    我想要获取 LinkedIn 会员在其个人资料中输入的每个职位的 ID 头衔 摘要 开始日期 结束日期 当前状态和公司名称 我测试了一个查询休息控制台 https apigee com console linkedin我得到了想要的结果 查
  • 检查 DOM 元素是否为复选框

    如何检查给定的 DOM 元素是否为复选框 设想 我有一组文本框和复选框 其中的值是动态分配的 我没有办法识别 DOM 元素是复选框还是文本框 只使用普通的 javascript 你就可以做到 if el type el type check
  • 通知用户消息仍在输入中

    我正在使用 Laravel 5 6 7 Socket IO 和 vue js 我没有使用 Pusher 和 redis 下面是我的代码 用于向与我一对一聊天的用户发送消息 var url http localhost 6001 apps M
  • 来自 DataURL 的 Blob?

    Using FileReader s readAsDataURL 我可以将任意数据转换为数据 URL 有没有办法将数据 URL 转换回Blob使用内置浏览器 API 的实例 用户 Matt 一年前提出了以下代码 如何在javascript中
  • HTML5 服务器端事件:EventSource 与包装的 WebSocket

    HTML5 服务器发送事件 SSE API 是否只是 HTML5 WebSocket 之上的受限制的 基于事件的 API 在我看来 一个EventSource只是一个WebSocket that Cannot send data 使用tex
  • 使用 NodeJS 让 Discord 机器人发送带有消息的图片

    我有几张照片 全部在 imgur 上 带有直接图像链接 格式 https i imgur com XXXXXX jpg https i imgur com XXXXXX jpg 以及用 NodeJS 制作的 Discord 机器人 我发送这
  • 为什么将数据存储为元素的属性存在风险?

    我一直在读同样的东西 直接在 DOM 元素上存储属性值是有风险的 因为可能会发生内存泄漏 但有人可以更详细地解释这些风险吗 按属性 我假设您指的是 DOM 元素上的属性 DOM 元素上的自定义属性安全吗
  • 在 Angular2 项目中集成 Treant-js

    我正在尝试在 Angular2 项目中使用 treant js 但我正在努力解决如何正确集成它的问题 我有一个工作正常的 JavaScript HTML 示例 我正在尝试在 Angular2 中工作 我创建了一个组件 从 npm 添加了 t
  • 提交前验证表单(比检查空字段更复杂)

    我有一个包含时间输入的表单 具体来说 开放时间和结束时间 当按下提交按钮时 它会转到一个 php 页面 其中这些输入将添加到数据库中 在允许提交表单之前我想检查一些事情 例如 我想确保开始时间早于 小于 结束时间 这是表格 Opens
  • 光滑的轮播缓动示例

    我正在使用 Slick Carousel http kenwheeler github io slick http kenwheeler github io slick 但不知道如何合并不同的幻灯片切换 有人有例子可以分享吗 这是我目前拥有
  • JQuery DataTable 单元格从行单击

    我正在尝试在 jquery 数据表上实现一个函数 该函数返回单击行的第一列和第四列 我正在遵循这个示例 它允许我操作单击的行http datatables net examples api select single row html ht
  • 空 URL 哈希导致页面在 js 事件上跳转

    我有一个带有下一个和上一个按钮的照片库 如果我的某个 javascript 方法由于某种原因被破坏 那么当单击其中一个按钮时 它会向 url 添加一个哈希值 即 www google com 我知道可以给散列一个 div id 来跳转到页面
  • 将 NPM 包客户端与 nuxt 结合使用

    我对 nuxt 和 javascript 非常陌生 我正在尝试弄清楚如何在客户端使用我的应用程序的依赖项 我将它们列在我的 nuxt config js 中并使用 npm 安装 我也有一个文件 plugins导入它们的目录 不确定这是否好
  • RTCDataChannel发送方法不发送数据

    我的 RTCDataChannel 遇到一个奇怪的问题 我正在对 WebRTC 进行一些研究 并且已经可以进行 WebRTC 音频 视频聊天 现在我想使用 RTCDataChannel 添加文本聊天和文件共享 我已经像这样创建了 RTCDa
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 使用 React React-router 登录后重定向到主页,并且 usenavigate 不起作用?

    我希望用户在成功登录后重定向到主页 我将用户登录的 api 请求的数据存储在一个名为 currentUser 的变量中 因此如果 currentUser 为 true 它应该重定向到主页 这就是我处理登录请求的方式 export const
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne
  • Serviceworker Bug event.respondWith

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

随机推荐

  • Slick 3:如何通过事务实现存储库模式?

    在我的 Play Framework 2 5 应用程序中 我需要为服务编写单元测试 我需要隔离数据访问逻辑 以便能够单独测试服务层 为此 我想创建存储库接口并在单元测试中模拟它们 class UserService def signUpNe
  • 只有 BooleanField 的 Django 表单

    我对 Django 相当陌生 我正在使用 Django 1 0 我有这个 形式 py class MyForm forms Form extra cheeze forms BooleanField required False initia
  • Pyarrow s3fs 按时间戳分区

    是否可以在中使用时间戳字段pyarrow表进行分区s3fs文件系统由 YYYY MM DD HH 将镶木地板文件写入时s3 我能够使用 pyarrow write to dataset 函数来实现 该函数允许您指定分区列来创建子目录 Exa
  • “闭包”和“块”到底有什么区别?

    我发现很多人都用这个词closure and block可以互换 这些人中的大多数无法解释他们在说什么 一些 Java 程序员 甚至是来自非常昂贵的咨询公司的程序员 将匿名内部类称为 块 和 闭包 但我知道这不是真的 您不能从定义可变变量的
  • MediaStore 中的 BUCKET_ID 是什么?

    我正在浏览一些查询 MediaStore Images 内容提供程序并使用名为 BUCKET ID 的列的代码 Uri uri MediaStore Images Media EXTERNAL CONTENT URI String proj
  • Java - 实现忙等待机制

    在我的项目中 到目前为止我已经 同步 了多个线程 每个线程都运行相同类型的Runnable 用一个CyclicBarrier http download oracle com javase 6 docs api java util conc
  • 如何在 iPhone 中从左到右设置动画视图?

    如何对从左到右的视图过渡进行动画处理 类似推送视图 当我单击按钮时 视图应该从左向右转换 所以请指导我并提供一些示例链接 Thanks 假设你想从右边推view2来替换view1 Set up view2 view2 frame view1
  • 缩短 NSString?

    我有一个非常简单的问题 是否有内置方法来缩短字符串 如果没有 有人可以提供一个这样做的例子ObjC 例如 这是一个很长的字符串 应该成为 这是AV 它需要检查字符串是否超过一定数量的字符以及是否被缩短 这非常简单 NSString orig
  • 使用行号进行 SQL 逆透视

    我有一个带有 UNPIVOT 的 SELECT 语句 SELECT dycd acnam dycd dynam dycd value FROM GCATT dbo tblDaycode UNPIVOT dycd value FOR dycd
  • 使用多个外部库时如何避免“重新定义”?

    我有两个库 第三方 并且在每个库中它们都定义了两个具有相同名称的类 在头文件中 Lib A HeaderA h struct mycompare Some code Lib B HeaderB h struct mycompare Same
  • Laravel 未发布到 Redis

    我正在尝试在本地 RESTful API 中实现 Redis 发布 该 API 是在 Laravel 中构建的 以便稍后使用 Web Sockets 实现聊天系统 我打算稍后从 Node JS 服务器读取它们 我在用Redis publis
  • Bamboo - Angular 4 应用程序如何部署

    如何在竹子上部署我的 Angular 4 应用程序 我只是做一个简单的工作 1 git 2 npm install 3 ng build 顺利通过了 但是接下来我应该做什么呢 如何将其部署在服务器上 以便我可以从浏览器进入应用程序 我尝试将
  • 使用索引优化MYSQL数据库[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在研究学习商务模拟 http www learnbizsimulations com 一家自筹资金的初创公司 为管理教育领域进行模拟 a 我们的网
  • 应用程序清单文件在 Win 7 环境中导致问题

    我的应用程序已从 net 1 1 升级到 3 5 在 win 7 64 位环境中 我必须手动删除 app exe manifest 文件 否则启动时会崩溃 我使用 Visual Studio 部署和设置项目进行安装 在exe的应用程序设置本
  • 使用 jquery 按值更改/修改下拉列表文本

    我有带有值的下拉列表
  • 如何在 TypeScript 项目中导入节点模块。 ERR_REQUIRE_ESM

    我正在尝试将包 p limit 导入到我的打字稿项目中 当尝试使用运行项目时tsc node serve js 我遇到了下面的错误 我已经被困在这个问题上几个小时了 Error ERR REQUIRE ESM Must use import
  • pm2 可以运行“npm start”脚本吗

    pm2 有没有办法运行 npm start 脚本 或者你只需 要运行pm2 start app js 所以在开发中 npm start 然后在生产中使用 pm2 你会运行类似的东西 pm2 start npm start 有一个等效的方法可
  • android sqlite异常:java.lang.IllegalArgumentException:列'_id'不存在

    我创建了一个包含以下列的 sqlite 数据库 static final String dbName demoDB static final String tableName Employees static final String co
  • MySQL 错误:没有密钥长度的密钥规范

    我有一个主键为 varchar 255 的表 在某些情况下 255 个字符是不够的 我尝试将字段更改为文本 但出现以下错误 BLOB TEXT column message id used in key specification with
  • 如何获取元素的事件监听器

    有没有办法使用 HTML 页面上的 JavaScript 获取该页面上某个元素的所有事件侦听器的列表 注意 我知道我们可以使用 Chrome 开发工具事件侦听器查看它们 但我想使用页面的 JavaScript 来记录 访问查看列表 另外 我