考虑一个元素<img id='hitMe' />
,它在jQuery函数中引用$('#hitme').click()
或$(document).on('click', '#hitme')
。如何在Javascript源代码中找到这些函数,而不是为字符串hitme
求值?考虑到grepping是不可行的,因为字符串可能具有任意大量的引用,并且可能存在大量导入的Javascript文件。
也许可能有办法让Firebug逐步进入页面加载后逐行运行的Javascript函数?考虑到我不知道在哪里设置断点,因为我不知道运行了哪个函数。
答案 0 :(得分:1)
Chrome或Chromium可以帮助您。右键单击要探索的元素,选择“Inspect element”,查看右侧面板,以“Computed Style”,“Style”开头......在它的底部,您将找到该部分“事件监听器”,它为您提供有关所侦听事件以及附加代码的位置的信息。
答案 1 :(得分:1)
此链接提供有关dom元素上事件处理程序的详细信息。
答案 2 :(得分:1)
我推荐Visual Event bookmarklet。接下来是来自网站的无耻复制粘贴:
Visual Event是一个开源的Javascript书签,它提供有关已附加到DOM元素的事件的调试信息。 视觉事件显示:
答案 3 :(得分:1)
尝试以下操作(我正在使用Chrome / Chrome开发工具):
用以下内容覆盖jQuery的on / click函数:
var old = $.fn.on;
$.fn.on = function() { console.log('called on'); debugger; old.apply(this, arguments);}
对.on()的每次调用现在应该通过你(同步)并暂停在'调试器';言。
暂停后,查看“调用堆栈”并找到您要查找的函数(例如调用.on()的函数)。您还可以在上面的覆盖函数中添加一些条件,以确保不会每次调用.on()都会暂停。
答案 4 :(得分:1)
这是一个解决方案,它捕获事件触发(调度)的时刻,而不是添加侦听器的时刻(on / click)。
可以通过覆盖jQuery.event.dispatch
来完成。
例如:
(function($){
var old = $.event.dispatch;
$.event.dispatch = function(event){
if(event.type=='click'){
var handlers = ( $._data( this, "events" ) || {} )[ event.type ] || [];
console.log('handlers', handlers[0]);
}
old.apply(this, arguments);
};
})(jQuery);
在这个例子中,我选择将功能的内容打印到控制台,但是使用debugger;
建议Omri Sivan进行调试也很有用。使用Chrome,您应该能够右键单击该功能以显示功能定义&#34;。