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

我在此连接上绑定了两个事件处理程序: 浏览器

<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"元素? 函数


#1楼

在现代版本的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中,您能够右键单击处理函数,而后单击“查看函数定义”,以向您显示在代码中定义的确切位置。 this


#2楼

当我像这样向$ ._ data传递一个稍微复杂的DOM查询: $._data($('#outerWrap .innerWrap ul li:last a'), 'events')它将在浏览器控制台中引起未定义。 spa

所以,我必须在父div上使用$ ._ data: $._data($('#outerWrap')[0], 'events')来查看a标签的事件。 这是相同的JSFiddle: http : //jsfiddle.net/giri_jeedigunta/MLcpT/4/ .net


#3楼

jQuery Audit插件插件应可以让您经过常规的Chrome开发工具进行此操做。 它不是完美的,可是它应该让您看到绑定到元素/事件的实际处理程序,而不单单是通用jQuery处理程序。 插件


#4楼

我用过相似的东西if($ ._ data($(“” a.wine-item-link“)[0])。events == null){...作一些事情,再次将它们的事件处理程序再次绑定}检查若是个人元素绑定到任何事件。 若是您已从该元素取消附加全部事件处理程序,它将仍然显示未定义(空)。 这就是为何我在if表达式中对此进行评估的缘由。 调试


#5楼

通常状况:

  • 点击F12打开开发工具
  • 点击Sources标签
  • 在右侧,向下滚动到Event Listener Breakpoints ,而后展开树
  • 单击您想听的事件。
  • 与目标元素进行交互,若是它们触发,您将在调试器中获得一个断点

一样,您能够:

  • 右键单击目标元素 ->选择“ Inspect element
  • 在开发框架的右侧向下滚动,在底部是“ event listeners ”。
  • 展开树以查看将哪些事件附加到元素。 不知道这是否适用于经过冒泡处理的事件(我猜不是)
相关文章
相关标签/搜索