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

Javascript 我可以用jQuery查找绑定在元素上的事件吗?,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,我在此链接上绑定了两个事件处理程序: <a href='#' id='elm'>Show Alert</a> 是否有任何方法可以获取绑定到元素上的所有事件的列表,在本例中是绑定到元素上的id=“elm”?在jQuery的现代版本中,您将使用$。\u data方法查找jQuery附加到相关元素上的任何事件。注意,这是一种仅供内部使用的方法: // Bind up a couple of event handlers $("#foo").on({ click: fu

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

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

是否有任何方法可以获取绑定到元素上的所有事件的列表,在本例中是绑定到元素上的
id=“elm”

在jQuery的现代版本中,您将使用
$。\u 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" );
$。\u data
的结果将是一个包含我们设置的两个事件的对象(如下图所示,扩展了
mouseout
属性):


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

当我将一个稍微复杂的DOM查询传递给$。\u数据时,如下所示:
$。\u数据($('.\outerrap.innerWrap ul li:last a'),'events')
它在浏览器控制台中抛出未定义的数据


因此,我必须在父div上使用$。\u数据:
$。\u数据($('outerWrap')[0],'events')
来查看a标记的事件。这里有一个相同的JSFIDLE:

该插件应该允许您通过普通的Chrome开发工具来实现这一点。它不是完美的,但它应该让您看到绑定到元素/事件的实际处理程序,而不仅仅是一般的jQuery处理程序。

我使用了类似这样的if($.\u data($(($)(((.wine-item-link))[0])。events==null){…做点什么,几乎再次绑定它们的事件处理程序}来检查我的元素是否绑定到任何事件。如果您从该元素中取消了所有事件处理程序的连接,它仍然会说undefined(null)。这就是我在if表达式中对其求值的原因。

一般情况:

  • 点击F12打开开发工具
  • 单击
    选项卡
  • 在右侧,向下滚动到
    事件侦听器断点
    ,然后展开树
  • 单击要侦听的事件
  • 与目标元素交互,如果它们触发,您将在调试器中获得断点
同样,您可以:

  • 右键单击目标元件->选择“
    检查元件”
  • 在dev框架的右侧向下滚动,底部是“
    事件侦听器”
  • 展开树以查看附加到元素的事件。不确定这是否适用于通过冒泡处理的事件(我猜不是)

    • 我为子孙后代添加这一点;有一种更简单的方法不需要编写更多的JS。使用

    • 右键单击元素并选择“使用Firebug检查元素”
    • 在侧栏面板(如屏幕截图所示)中,使用tiny>箭头导航到events选项卡
    • “事件”选项卡显示每个事件的事件和相应函数
    • 它旁边的文本显示函数位置

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

    • 在元素上单击鼠标右键
    • 在关联菜单中,单击“检查元素”
    • 如果元素旁边有“ev”图标(黄色框),请单击“ev”图标
    • 显示该元素和事件处理程序的所有事件

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

      $._data( $(document)[0], "events" );
      
      并使用正确的选择器查找事件:

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


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

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

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

      这只适用于通过jQuery帮助程序绑定的元素。@jammypeach我正在尝试您的解决方案,但仍然得到未定义的选择器返回值。我使用了$('#elem').bind('click',function(){});如果这会有所不同的话。@marcus ahhh,woops我错过了一些东西,对不起:)
      $。\u数据(元素[0],'events')现在必须使用:$。_data($('#foo')[0])。事件
      $。_data()
      由JQuery internal使用
      $.data()
      是用户的公共方法。和
      $。数据(元素,'events')
      工作正常。原因是您正在从
      $('#outerWrap')
      委派事件。事件实际上绑定到该元素,而不是单个锚。我同意这是首选方法,是一个通用解决方案,而不是依赖jQuery,它可能可用,也可能不可用。@dead-umm。。。该问题特别涉及jQuery,并在示例附件中使用jQuery-答案应仅在jQuery(?)的上下文中有效。理解其他上下文中的答案也很有帮助。仅仅因为有人问了一个特定的问题,并不意味着他们将得到的答案是最好的。尤其是使用jQuery时,人们倾向于将其作为支撑。理解底层架构很重要。这个答案表明jQuery甚至不是必需的。问题和示例过于模糊,无法了解其用法,因此,什么可以被视为有效答案有待解释。这也可以在IE开发工具中找到。非常棒的答案,尤其是屏幕截图,使其更容易理解。谢谢你的努力!我认为这不是一个本机函数,需要以下脚本/依赖项:这应该添加到答案中,否则会产生误导。但是谢谢你让我使用这个“插件”;看起来不错。:)
      // Get all event listners bound to the document object
      getEventListeners(document);