使用 Chrome,如何查找绑定到元素的事件

IT技术 javascript google-chrome debugging dom-events inspector
2021-01-21 13:13:46

假设我的页面上有一个链接:

<a href="#" id="foo">Click Here</a>

我不知道其他任何事情,但是当我单击链接时,alert("bar")会显示一个。所以我知道在某个地方,一些代码被绑定到#foo.

如何找到将 绑定alert("bar")到点击事件的代码我正在寻找 Chrome 的解决方案。

Ps.:这个例子是虚构的,所以我不是在寻找像这样的解决方案:“使用 XXXXXX 并在整个项目中搜索“警报(\"bar\")”。我想要一个真正的调试/跟踪解决方案。

6个回答

使用Chrome 15.0.865.0 开发版Elements 面板上有一个“事件侦听器”部分:

在此处输入图片说明

以及“脚本”面板上的“事件侦听器断点”。使用鼠标 -> 单击断点,然后“进入下一个函数调用”,同时注意调用堆栈以查看哪个用户空间函数处理事件。理想情况下,你会用unminified一个替代的jQuery的精缩版,这样你就不必一步所有的时间和使用步过在可能的情况。

在此处输入图片说明

这些工具在 Chrome 12.0.742.100 中也都可用。:) 谢谢 !
2021-03-13 13:13:46
要将 jquery 从调用堆栈中排除,请将脚本黑框:developer.chrome.com/devtools/docs/blackboxing @IonuțG.Stan 或 mods,您能否参考 blackboxing 更新答案 - 似乎是一个常见问题与此答案相关。
2021-03-20 13:13:46
单步执行 jQuery 复杂的事件调度代码是一件非常痛苦的事情。下面的 jQuery Audit 答案(stackoverflow.com/a/30487583/24267)要好得多。
2021-03-21 13:13:46
越来越近了,但是里面的大部分结果都指向了... jquery.min.js 的第16行:((我明白为什么,不用解释了,但是我们怎么才能找到谁调用了...的bind()方法呢? jQuery ?
2021-03-25 13:13:46
@Fluffy:您不必这样做。{ }查看js时点击左下角的符号即可。魔法。
2021-03-26 13:13:46

您还可以使用 Chrome 的检查器以另一种方式查找附加事件,如下所示:

  1. 右键单击要检查的元素,或在“元素”窗格中找到它。
  2. 然后在“事件侦听器”选项卡/窗格中,展开事件(例如“单击”)
  3. 展开各种子节点以找到您想要的子节点,然后查找“处理程序”子节点所在的位置。
  4. 右键单击“函数”一词,然后单击“显示函数定义”

这将带您到定义处理程序的位置,如下图所示,并由 Paul Irish 在此处解释:https : //groups.google.com/forum/#!topic/google- chrome-developer-tools/ NTcIS15uigA

'显示函数定义'

两年了,仍然是这个问题的最佳答案。
2021-03-16 13:13:46

尝试使用 jQuery Audit 扩展 ( https://chrome.google.com/webstore/detail/jquery-audit/dhhnpbajdcgdmbbcoakfhmfgmemlncjg ),安装后按照以下步骤操作:

  1. 检查元素
  2. 在新的 ' jQuery Audit ' 选项卡上展开 Events 属性
  3. 选择您需要的活动
  4. 从处理程序属性中,右键单击函数并选择“显示函数定义
  5. 您现在将看到事件绑定代码
  6. 单击“漂亮打印”按钮以获得更易读的代码视图
我经常发现“事件侦听器”列出了“无事件侦听器”,并且选择“事件侦听器断点”>“鼠标”>“单击”不会创建断点。这个插件效果很好。
2021-03-13 13:13:46
@Javier > 这是一个很好的回应。它适用于 javascript(非 jQuery)mecanisme 吗?
2021-03-14 13:13:46
这是一个出色的扩展,可以节省大量筛选 JavaScript 的时间。
2021-03-20 13:13:46

(截至 2020 年最新)对于 Chrome 版本 83.0.4103.61

Chrome 开发者工具 - 事件监听器

  1. 选择要检查的元素

  2. 选择事件侦听器选项卡

  3. 确保检查框架侦听器以显示真实的 javascript 文件而不是 jquery 函数。

编辑:代替我自己的答案,这个答案非常好:How to debug JavaScript/jQuery event bindings with Firebug (or similar tool)

Google Chromes 开发者工具在脚本部分内置了搜索功能

如果您不熟悉此工具:(以防万一)

  • 右键单击页面上的任意位置(在 chrome 中)
  • 单击“检查元素”
  • 单击“脚本”选项卡
  • 右上角的搜索栏

快速搜索 #ID 应该最终将您带到绑定函数。

例如:搜索#foo会带你到

$('#foo').click(function(){ alert('bar'); })

在此处输入图片说明

很好的问题。根据我的经验,这就是人工调试过程通常开始的地方:)
2021-03-30 13:13:46
呵呵,你说得对,但我的问题也是关于我作为一个人必须做什么:p
2021-04-06 13:13:46
好的开始,但是如果我有 1500 个对 #foo 的引用,其中大多数没有绑定任何东西,或者在我在当前情况下没有触发的外部脚本中有多个 #foo ID 的情况下怎么办?
2021-04-11 13:13:46