Javascript 事件处理程序存储在哪里?

2023-11-25

我试图弄清楚 DOM 如何跟踪事件处理程序,无论是通过使用 jQuery、addEventListener 还是通过 HTML 属性(例如 onload="myFunc()")进行绑定。

我读到 jQuery 使用 .data() 方式来存储 jQuery 绑定的事件处理程序...但是其他的呢?他们去哪里?我知道 Webkit 的检查器工具通过检查“元素”选项卡中的元素来显示事件侦听器,但它从哪里获取该信息?

顺便说一句,在使用 Chrome 的 Web 检查器进行的一些测试中,我使用控制台通过引入<script>标签,从而覆盖jQuery and $变量。显然,替换之前使用 jQuery 绑定的事件丢失了,因为在此过程中引入了新的 .data() 接口。

然而,那些“丢失”的处理程序仍然绑定到某些事件,因为它们实际上最终会在事件触发时被调用。假设我想完全删除它们,或者用我自己的处理程序取代它们?这就是为什么我想知道如何在 DOM 保存实际处理程序的地方访问它们......并且无需 jQuery。


关于像这样的方法addEventListener,它们在常规 JavaScript 代码中不直接可见。它们存储在内部。


关于内联处理程序,它们只是直接存储在 DOM 元素上,就像典型的处理程序一样,因此:

<a href="#" onclick='alert("foo");'>click</a>

有效地变成这样:

a_element.onclick = function(event) { alert("foo"); };

(旧版 IE 不包括event函数中的参数。)


关于 jQuery,你是对的,它们存储在.data(),或更准确地说jQuery.cache.

但是您的处理程序永远不会直接分配给该元素。 jQuery 分配一个通用处理程序(using addEventListener or attachEvent,任何可用的)你永远不会看到的。当事件发生时,它会查看event.type,然后查找该元素的.data()查看是否有该类型的处理程序,如果有,则调用它们。


所以如果你有一些脚本被覆盖jQuery.cache,您实际上已经孤立了这些处理程序。您无法删除绑定的处理程序addEventListener除非您有对该处理程序的引用。由于 jQuery 的通用处理程序也存储在jQuery.cache,除非你破坏元素本身,否则无法解除绑定。

我不记得通用处理程序是否有引用jQuery.cache或者只是其中的一个子集。它所保存的引用会对可能存在的泄漏数据量产生影响。

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

Javascript 事件处理程序存储在哪里? 的相关文章

  • 如何将大数据传递给网络工作者

    我正在研究网络工作人员 并将大量数据传递给网络工作人员 这需要很多时间 我想知道发送数据的有效方式 我尝试过以下代码 var worker new Worker js2 js worker postMessage buffer buffer
  • 替换文本区域的文字

    我制作了一个 javascript 函数来将文本区域中的某些单词替换为其他单词 但它不起作用 我做了这个 function wordCheck var text document getElementById eC value var ne
  • javascript 可以从父页面访问 iframe 元素吗?

    我的页面上有 iframe iframe 和父页面位于不同的域中 父页面上的 javascript 代码可以访问此 iframe 内的元素吗 如果页面来自不同的域 则不应该这样做 浏览器安全沙箱应该阻止这种类型的访问 当两个页面来自不同的时
  • JavaScript 中的负数到二进制字符串

    任何人都知道为什么javascriptNumber toString https developer mozilla org en US docs JavaScript Reference Global Objects Number toS
  • 可以跨 iframe 共享 javascript 导入吗?

    我有一个 Web 应用程序 其中有多个 iframe 它们都需要导入相同的 javascript 库 例如 jquery 有没有办法只加载一次并以某种方式在所有 iframe 之间共享该数据 我不想让我的页面加载缓慢 因为它为每个 ifra
  • Javascript 字符串/整数比较

    我在 HTML 中存储一些客户端参数 然后需要将它们作为整数进行比较 不幸的是我遇到了一个我无法解释的严重错误 该错误似乎是我的 JS 将参数读取为字符串而不是整数 导致我的整数比较失败 我生成了一个错误的小例子 我也无法解释 运行时以下返
  • JavaScript 变量带有一个我需要在 Html.ActionLink 中使用的 ID

    我的 jQuery 代码中有一个 JavaScript 变量 其中包含一个我需要在我的Html ActionLink但它不起作用 Html ActionLink Genomf r AnswerForm AnswerNKI new id go
  • $(document).ready 回调何时执行?

    假设我们附加一个 click http api jquery com click 锚点的处理程序 a 中的标签 document ready http api jquery com ready 打回来 该处理程序将取消默认操作 遵循href
  • Bootstrap 页脚不在底部

    我试图强制我的页脚位于网站底部 我不希望它在滚动时粘住 只是在向下滚动网页时出现在底部 目前 网页显示时页脚位于内容下方 我添加了这样的代码bottom 0 并发现它粘住了并且不适合我的网站 我还添加了这样的代码html body heig
  • 将新数据添加到 d3 Streamgraph 时的转换

    我使用d3绘制了一个与官方示例非常相似的流图http bl ocks org mbostock 4060954 http bl ocks org mbostock 4060954 唯一的区别是我如何用新数据更新它 我不仅想要垂直 y 值 过
  • 有效 JSON 上的 Firefox JSON“格式不正确”错误

    我在 Firefox 中收到以下错误消息 Error not well formed Source File http school courses booking add php 1287657494723 Line 1 Column 1
  • 通过标记或JS强制下载

    假设我在 CDN 来自 Rackspace 的云文件 上有一个文件 以及一个包含该文件链接的静态 html 页面 有什么方法可以强制下载此文件 以防止它在浏览器中打开 例如 mp3 我们可以让我们的服务器读取该文件并将相应的标头设置为 he
  • 如何在 Chrome 中将 Set 转换为数组?

    如何将集合转换为数组 https stackoverflow com questions 20069828 how to convert set to array给出了将 Set 转换为 Array 的三个答案 目前在 Chrome 浏览器
  • 在 json 对象中执行 javascript 代码?

    有远吗 所以像这样 key1 val1 key2 val2 some code document getElementById someid innerHTML test 那么 some code 会在没有任何用户干预的情况下执行吗 No
  • jQuery onclick 隐藏其父元素[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想隐藏 li tag on a 使
  • 如何在传单地图上显示热图

    我想在我的传单地图上显示热图 我使用了 heatmap jshttps github com pa7 heatmap js https github com pa7 heatmap js但它最终只是显示 未捕获的类型错误 无法分配给只读属性
  • 解析字符串:提取单词和短语 [JavaScript]

    我需要在以空格分隔的术语列表中支持确切的短语 用引号引起来 因此 用空格字符分割相应的字符串已经不够了 Example input foo bar lorem ipsum baz output foo bar lorem ipsum baz
  • 过滤数据表中的行

    我目前的 JQuery 插件 DataTables 工作正常 并且我在页面顶部插入了一个按钮来进一步过滤列表 我还使用了 DataTables 内置的搜索栏 我希望按钮向下过滤表格 并只显示包含特定值的行 下面是我一直在做的事情 但似乎没有
  • HTML 画布从 getImageData 返回“偏离一些”字节

    我找到getImageDataHTML 画布似乎返回不正确的字节值 我使用以下 Python 代码生成了 1x1 px 图像 from PIL import Image import numpy as np a np array 12 18
  • 如何将国家/地区代码与电话号码分开?

    我的数据库中有很多电话号码 例如 1 123 456 7890 我要做的是将国家 地区拨号代码 在本例中为美国 加拿大的 1 与电话号码分开 我尝试创建所有国家 地区的 JSON 列表 并在加载页面时将电话号码和国家 地区代码分开 它工作正

随机推荐

  • 无状态类仿函数什么时候可以代替 C 风格函数?

    我在 SO 上找到了一些很好的函子示例 例如this一 所有令人信服的例子似乎都在定义的类中使用了状态operator 我在一本书中遇到一个例子 它定义了没有状态的函数调用运算符 我不禁觉得这是一种尴尬的用法 并且普通风格的函数指针会比使用
  • LocationManager 返回旧的缓存“Wifi”位置和当前时间戳

    我正在尝试获取当前位置 为此 我实现了一个 LocationListener 并将其注册到网络和 GPS 提供商 locationManager requestLocationUpdates LocationManager GPS PROV
  • 将 Objective-C 应用程序链接到 C++ 静态库

    我正在尝试使用 Xcode 构建一个链接到静态 C 库的 Objective C 桌面应用程序 我正在使用苹果的 clang 编译器 我收到以下链接器错误 Apple clang version 3 0 tags Apple clang 2
  • 使用 GroovyShell 从 Gradle 运行 Groovy 脚本:线程“main”中出现异常 java.lang.NoClassDefFoundError:org/apache/commons/cli/ParseException

    我想从我的 Gradle 构建脚本运行一个 groovy 命令行脚本 我在 Gradle 脚本中使用此代码 def groovyShell new GroovyShell groovyShell run file script groovy
  • 覆盖电子

    我想知道是否可以将电子制作的应用程序覆盖在游戏上 本质上类似于游戏中蒸汽覆盖的方式 我想要这个 因为我们已经制作了一个计时器网络应用程序来计时任务 并正在讨论如果可能的话将其作为覆盖层 为游戏中重复发生的某些事件计时 我不知道这是否可以实现
  • cassandra将数据从一个列族复制到另一个列族

    我是卡桑德拉的新手 我需要将数据从一个columnFamily复制到cassandra中同一键空间中的另一个columnFamily 比如说 我们在键空间K1中有一个A1columnFamily 所以现在我需要在同一键空间K1中创建colu
  • DN 的 JavaScript 正则表达式

    我想要一个正则表达式来验证所有类型的可能 DN 我创建了一个 但效果不太好 A z0 9 1 A z0 9 1 and 其他一些改变它 但徒劳无功 可能的 DN 可以是 CN abcd CN abcd O abcd C us CN abcd
  • 获取函数调用者的范围

    我有一个函数在 ExtJS 第 1433 行的某个地方中断 var createDelayed function h o scope console log arguments logs undefined all round return
  • 使用 jfeinstein10 库的滑动菜单

    我创建了一个示例应用程序来测试滑动菜单的工作原理 下面的屏幕截图显示的是我现在得到的 但是 当我单击类别按钮 如下图所示 时 我应该会看到一个二级菜单 如下面 zomato 应用程序的屏幕截图所示 我怎样才能做到这一点 我是否以正确的方式进
  • pandas read_csv 删除空白行

    我正在读取 CSV 文件作为DataFrame同时定义每列的数据类型 如果 CSV 文件中有空行 此代码会出错 如何读取没有空白行的 CSV dtype material id object location id object time
  • Python标准库真的标准吗?

    Python 标准库是标准吗 如果安装了 Python 那么标准库也会安装吗 The 文档 reads 对于类 Unix 操作系统 Python 通常作为包的集合提供 因此可能需要使用操作系统提供的打包工具来获取部分或全部可选组件 标准库i
  • PHP 会话的安全性

    我知道这个问题已经被问了数十亿次 但我对我的编码安全性非常偏执 强迫症 我正在做一个小项目 会话数据将仅包含 user id 1 用户名我的用户名 登录 true csrf token87cc51ee94178df79cccce2aebc4
  • 在线程应用程序中准确计时一行代码,C#

    假设应用程序是多线程的 在 C 中对线程或一行代码进行计时的最准确方法是什么 亲切的问候 计时线程 到底是什么意思 要精确计算 以实际时间 某件事需要多长时间 请使用 System Diagnostics Stopwatch 我不相信有任何
  • PHP 中的动态常量名称

    我正在尝试动态创建一个常量名称 然后获取该值 define CONSTANT 1 Some value try to use it dynamically constant number 1 constant name CONSTANT c
  • 在 ASP.Net Boilerplate 中,从应用程序服务层调用 SignalR Hub 是一种不好的做法吗?

    我将 Asp Net 样板模板与 ASP Net Core 2 1 一起使用 我在 Web Core 程序集中实现了一个集线器并创建了一个控制器 我可以从任何客户端使用我的集线器订阅 通知数据 这不是我的问题 我想在应用程序服务层中使用此集
  • 如何解组 JSON?

    我正在尝试将 JSON 解组为结构 但是 该结构有一个带有标签的字段 使用反射 我尝试查看标签中是否包含字符串 json 如果是这样 那么要解组的 json 应该简单地作为字符串解组到字段中 Example const data I 3 S
  • 使用 jQuery 更新 flashvars 并重新加载 flash

    我想更新 flashvars 值参数以观看另一个视频
  • 我到底如何使用 nginx 和 Gunicorn 为 Django 应用程序提供静态文件服务器?

    现在 我正在尝试遵循本教程 http honza ca 2011 05 deploying django with nginx and gunicorn 模板网站加载正确 但图像未加载 这是我的应用程序的 config py 文件的一部分
  • Android - 激活系统键锁(又名锁屏)

    我必须激活android的系统键锁 当你按下关闭电源 hang up按钮 看这里 我已经浏览过文档 但我发现的一切都是电源管理器 and 键盘锁管理器 两者似乎都不是解决方案 那么 大家知道如何从 Android 应用程序中实现这一点吗 如
  • Javascript 事件处理程序存储在哪里?

    我试图弄清楚 DOM 如何跟踪事件处理程序 无论是通过使用 jQuery addEventListener 还是通过 HTML 属性 例如 onload myFunc 进行绑定 我读到 jQuery 使用 data 方式来存储 jQuery