检查一个元素来调查jQuery事件绑定

假设:我find一个带有button('#bButButton')的页面,点击时会导致一个美洲驼('img#theLlama')使用jQuery显示()。

所以,buttons.js中的某处(比如76行)

$('#bigButton').click(function(){ $('img#theLlama').show(); }) 

现在,假设我有一个包含大量.js文件的大型HTML页面。 我可以点击button,看到美洲驼出现,但我不知道上面的代码是在哪里。

我正在寻找的解决scheme非常类似于在Firebug中可用的CSS。 我想检查元素,让它告诉我,这个jQuery出现在buttons.js的第76行,以及这个元素上的任何其他绑定。

* 注:赏金是针对“骆驼问题”的具体答案,即指向上述解决scheme。 *

对于许多jQuery任务来说,FireQuery是一个很好的工具,但它似乎并不能回答美洲驼的问题。 如果我错了,请纠正我。

使用Firebug , FireQuery和这个小提琴 :

点击Cmd + Shift + C(检查元素)并点击button显示: 截图1

点击事件Object {click= }显示这(扩大一些信息后)

截图2

点击function()看到:
截图3

应该是你正在寻找的代码,对不对?

作为一个说明,Firebug不能总是find确切的代码行。 我有这个方法完全失败! 另一种方法是使用命名函数expression式。 将代码更改为:

 $('#bigButton').click(function showMyLlama(){ $('img#theLlama').show(); }) 

现在在检查events对象时显示这一点:

替代文字

哪个方法比function()更有用,因为现在很明显,这个处理程序向我们展示了一个美洲驼。 您现在也可以search函数名称的代码并find它!


使用Chrome ,其内置的networking检查器和这个小提琴 :

点击Cmd + Shift + C(检查元素)并点击button显示:
截图

点击元素检查器中的button,然后按Escape打开JS控制台: 截图

在Chrome控制台中, $0引用元素面板中的选定元素。

$._data( $0 )打字会给我们包含事件的jQuery(内部)数据对象,就像在我们的Firebug例子中一样,不幸的是,Chrome不会让我们点击这个函数,但是它会让我们看到源码:

<Broken Screenshot link>


关于.live()事件的说明:

Live Events存储在$._data( document, "events" )并包含一个指向函数的origHandler

<Broken screenshot link>

鉴于你接口之后,我想你会想要FireQuery: http : //firequery.binaryage.com/

这是一个专门为这样的领域(一个jQuery特定的插件,数据/事件强大)的Firebug插件。

FireQuery是最方便的,但是如果你需要手动完成的话,你可以通过$(element).data('events').click[0].handler获得对click处理函数的引用, $(element).data('events').click[0].handler (当然不是如果有多个点击处理程序,则必然为0)。 从那里它是由您最喜爱的debugging器来定位代码中的function。 (使用命名函数有助于Firebug有时可以find匿名函数,但更多的时候不会,如果你用鼠标hover在上面,它将显示函数的主体)。

更新这是如何使用FireQuery显示数据:

HTML视图:

Firebug HTML视图中的jQuery数据

安慰:

jQuery数据在Firebug控制台

那么eventbug会告诉你一个元素的所有事件处理程序, http ://getfirebug.com/releases/eventbug但是处理程序通常是一些通用代码。