检查一个元素来调查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显示:
点击事件Object {click= }
显示这(扩大一些信息后)
点击function()
看到:
应该是你正在寻找的代码,对不对?
作为一个说明,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视图:
安慰:
那么eventbug会告诉你一个元素的所有事件处理程序, http ://getfirebug.com/releases/eventbug但是处理程序通常是一些通用代码。