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

<a href='#' id='elm'>Show Alert</a>

JavaScript:

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

function _f(){alert('clicked');}
function _m(){alert('mouse over');}

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


当前回答

虽然这并不完全针对jQuery的选择器/对象,但在FireFox Quantum 58中。x,你可以使用Dev工具在元素上找到事件处理程序:

右键单击元素 在上下文菜单中,点击“Inspect Element” 如果元素(黄色框)旁边有一个“ev”图标,点击“ev”图标 显示该元素和事件处理程序的所有事件

其他回答

当我传递一个复杂的DOM查询到$。像这样:$. _data。_data($('#outerWrap . innerwrap ul li:last a'), 'events')它在浏览器控制台中抛出undefined。

所以我必须使用$。$._data($('#outerWrap')[0], 'events')查看a标签的事件。这里有一个相同的JSFiddle: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/

我使用了类似这样的if($._data($("a.wine-item-link")[0])。事件== null){…做点什么,基本上是再次绑定它们的事件处理程序来检查我的元素是否绑定到任何事件。如果你已经从该元素中解除了所有事件处理程序,它仍然会说未定义(null)。这就是为什么我在if表达式中求值的原因。

在现代版本的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" );

$.的结果。_data将是一个包含我们设置的两个事件的对象(下图展开mouseout属性):

然后在Chrome中,你可以右键单击处理函数,然后单击“查看函数定义”来显示它在代码中定义的确切位置。

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

例如,在dev tools控制台中输入以下内容:

// Get all event listners bound to the document object
getEventListeners(document);

请注意,事件可以附加到文档本身,而不是相关的元素。在这种情况下,你会想使用:

$._data( $(document)[0], "events" );

用正确的选择器找到事件:

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