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

<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"?


当前回答

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

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

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

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

其他回答

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

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

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

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

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

我加上这个是为了子孙后代;有一种更简单的方法,不需要编写更多的JS。使用firefox的firebug插件,

右键点击元素,选择“Inspect element with Firebug” 在侧边栏面板(如截图所示)中,使用小>箭头导航到事件选项卡 事件选项卡显示每个事件的事件和相应的函数 旁边的文字显示了函数的位置

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

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

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