我可以使用jQuery查找绑定在元素上的事件吗?

Pra*_*sad 347 javascript jquery javascript-events

我在这个链接上绑定了两个事件处理程序:

<a href='#' id='elm'>Show Alert</a>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$(function()
{
  $('#elm').click(_f);
  $('#elm').mouseover(_m);
});

function _f(){alert('clicked');}
function _m(){alert('mouse over');}
Run Code Online (Sandbox Code Playgroud)

有没有办法得到一个元素绑定的所有事件的列表,在这种情况下元素与id="elm"

Sam*_*son 502

在现代版本的jQuery中,您将使用该$._data方法查找jQuery附加到相关元素的任何事件.注意,这是一个仅供内部使用的方法:

// Bind up a couple of event handlers
$("#foo").on({
    click: function(){ alert("Hello") },
    mouseout: function(){ alert("World") }
});

// Lookup events for this particular Element
$._data( $("#foo")[0], "events" );
Run Code Online (Sandbox Code Playgroud)

结果$._data将是一个包含我们设置的两个事件的对象(如下图所示,mouseout扩展了属性):

$ ._的控制台输出

然后在Chrome中,您可以右键单击处理程序函数并单击"查看函数定义"以显示代码中定义它的确切位置.

  • 这仅适用于通过jQuery帮助程序绑定的元素. (57认同)
  • 这些天必须使用:$ ._ data($('#foo')[0]).events (16认同)
  • @marcus ahhh,woops我错过了什么,对不起:)`$ ._ data(element [0],'events');` (6认同)
  • `$._data()` 由 JQuery 内部使用。`$.data()` 是用户的公共方法。并且`$.data(element, 'events')` 工作正常。 (5认同)
  • @jammypeach我正在尝试你的解决方案,但仍然为选择器返回undefined.我用$('#elem').bind('click',function(){}); 如果这会有所作为. (3认同)
  • `TypeError:$ ._ data不是函数`(函数($){$ ._ data($('#edit-search-block-form - 2'),"events");})(jQuery); (2认同)
  • 我不禁想到"现代"会变得越来越亲戚,当然最终可能会过时 - 我们可以获得版本号吗? (2认同)

Val*_*hah 69

一般情况:

  • 点击F12打开Dev Tools
  • 单击Sources选项卡
  • 在右侧,向下滚动Event Listener Breakpoints并展开树
  • 单击要收听的事件.
  • 与目标元素交互,如果它们触发,您将在调试器中获得一个断点

同样,您可以:

  • 右键单击目标元素 - >选择" Inspect element"
  • 向下滚动到开发框架的右侧,底部是' event listeners'.
  • 展开树以查看附加到元素的事件.不确定这是否适用于通过冒泡处理的事件(我猜不是)

  • 我同意这是首选的方法,并且是一种通用的解决方案,而不是依赖于jQuery,它可能有也可能不可用. (3认同)
  • @dead嗯...这个问题特指jQuery并在示例附件中使用jQuery - 答案应该只在jQuery(?)的上下文中有效 (3认同)
  • 在其他环境中理解答案也很有帮助.仅仅因为某人提出具体问题并不意味着他们将获得的有限答案是最好的答案.特别是对于jQuery,人们往往依赖它作为拐杖.理解底层架构很重要.这个答案表明jQuery甚至不一定是必需的.问题和例子太模糊,无法了解其用法,因此可以解释可以被视为有效答案的内容. (3认同)

kak*_*oma 12

我正在为后代添加这个; 有一种更简单的方法,不涉及编写更多的JS.使用惊人的firebug插件for firefox,

  1. 右键单击元素并选择"使用Firebug检查元素"
  2. 在侧边栏面板中(如屏幕截图所示),使用tiny>箭头导航到events选项卡
  3. "事件"选项卡显示每个事件的事件和相应的功能
  4. 它旁边的文字显示了功能位置

在此输入图像描述

  • 这在 IE 开发工具中也可用。 (2认同)

Sco*_*tyG 9

现在,您可以使用javascript函数getEventListeners()简单地获取绑定到对象的事件侦听器列表.

例如,在开发工具控制台中键入以下内容:

// Get all event listners bound to the document object
getEventListeners(document);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这不是本机函数,需要以下脚本/依赖项:https://github.com/colxi/getEventListeners应该将其添加到答案中,否则会引起误解。但是,感谢您让我使用“插件”;看起来不错。:) (2认同)

Joh*_*hnK 6

jQuery的审计插件插件应该让你通过正常的Chrome浏览器开发工具做到这一点.它并不完美,但它应该让你看到绑定到元素/事件的实际处理程序,而不仅仅是通用的jQuery处理程序.


Chr*_*s22 5

虽然这并不完全特定于 jQuery 选择器/对象,但在 FireFox Quantum 58.x 中,您可以使用开发工具在元素上找到事件处理程序:

  1. 右键单击该元素
  2. 在上下文菜单中,单击“检查元素”
  3. 如果元素旁边有“ev”图标(黄色框),请单击“ev”图标
  4. 显示该元素和事件处理程序的所有事件

FF 量子开发工具


Pik*_*er2 5

请注意,事件可能附加到文档本身而不是相关元素。在这种情况下,您需要使用:

$._data( $(document)[0], "events" );
Run Code Online (Sandbox Code Playgroud)

并找到具有正确选择器的事件:

在此输入图像描述

然后查看处理程序> [[FunctionLocation]]

在此输入图像描述