如何找到jQuery事件的原始(匿名函数)源?

时间:2012-10-19 01:07:26

标签: javascript jquery firebug anonymous-function google-chrome-devtools

大多数jQuery代码使用匿名函数,例如:

jQuery('someelements').someEvent(function() {
    // code here
});

这很好用,但调试效果不佳。我尝试使用Firefox Firebug和Chrome的检查器找到一些匿名函数的来源,具有暂停javascript功能,但它调用的实际代码是在jQuery js文件中,并且单步执行代码从不告诉什么行,甚至是什么.js文件添加了该事件。如何查看操作的定义?

5 个答案:

答案 0 :(得分:1)

有一个Google Chrome / Firefox插件,可以让您查看jQuery或其他(特定)库注册的事件:Visual Event

类似的问题:Firefox extension to find out which Javascript event is bound to an inspected element?

答案 1 :(得分:1)

尝试使用非缩小版本的jQuery并使用Firebug中的profile功能查找jQuery源中与代码中事件发生时调用的确切行。

如果您的目的是找到一些jQuery选择器或函数实现的实现,请参考这个令人惊讶的资源: http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/

答案 2 :(得分:0)

我不确定我是完全在上下文中。 但是,如果您将该函数视为值(例如在某些对象属性中),则始终可以从Chrome DevTools中的上下文菜单导航到其源。

答案 3 :(得分:0)

我发现有用的一件事是给事件处理程序一个名字,尽管它没有被其他地方调用。这样,在分析工具中识别它就更容易了。

e.g。

jQuery('someelements').someEvent(function someEventHandler() {
    // code here
});

一旦事件处理程序都有名称,您就可以破解jquery dev版本来记录事件和处理程序名称。我在ret = ... .apply()

之上的事件调度方法中添加了这个
var handler = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler );
console.log("FIRE EVENT ", event.type, "HANDLER: ", handler.name||'Anonymous Function'); 

答案 4 :(得分:-1)

jQuery('someelements').someEvent(function(e) {
    // code here
alert(e.target);
});