如何使用Firebug或类似工具调试JavaScript / jQuery事件绑定?

我需要调试一个使用jQuery进行一些相当复杂和混乱的DOM操作的Web应用程序某一时刻,某些与特定元素绑定的事件并未触发,只是停止工作。

如果我有能力编辑应用程序源代码,那么我将向下钻取并添加一堆Firebug console.log()语句和注释/取消注释代码段,以试图找出问题所在。但是,假设我无法编辑应用程序代码,并且需要使用Firebug或类似工具完全在Firefox中工作。

Firebug非常擅长让我浏览和操作DOM。不过,到目前为止,我还无法弄清楚如何使用Firebug进行事件调试。具体来说,我只想查看在给定时间绑定到特定元素的事件处理程序的列表(使用Firebug JavaScript断点来跟踪更改)。但是Firebug无法查看绑定事件,或者我太笨了,找不到它。:-)

有什么建议或想法吗?理想情况下,我只想查看和编辑绑定到元素的事件,就像今天编辑DOM一样。

猿阿飞Tom2020/03/11 23:25:07

Firebug 2现在确实包含DOM事件调试/检查。

YOC388805452020/03/11 23:25:07

According to this thread, there is no way in Firebug to view what events are attached to listeners on a DOM element.

It looks like the best you can do is either what tj111 suggests, or you could right-click the element in the HTML viewer, and click "Log Events" so you can see which events are firing for a particular DOM element. I suppose one could do that to see what events could be firing off particular functions.

米亚小小神乐2020/03/11 23:25:07

我还在Chrome存储区中找到了jQuery Debugger您可以单击一个dom项目,它将显示绑定到该事件的所有事件以及回调函数。我正在调试一个无法正确删除事件的应用程序,这帮助我在几分钟之内找到了它。显然,这是针对Chrome的,而不是针对Firefox的。

小哥阿飞神奇2020/03/11 23:25:07

ev 元素旁边的图标

在Firefox开发人员工具的“ 检查器”面板中,列出了绑定到元素的所有事件。

首先使用Ctrl+ Shift+ 选择一个元素C,例如Stack Overflow的upvote箭头。

单击ev元素右侧图标,然后将打开一个对话框:

活动工具提示

单击||所需事件的暂停符号,这将在处理程序行上打开调试器。

现在,您可以像往常一样在调试器中放置一个断点,方法是单击该行的左边界。

在以下网址中提到了这一点:https : //developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_event_listeners

不幸的是,我找不到一种可以与Prettyfcation完美配合的方法,它似乎只是最小化了:如何在Firefox / Firebug中美化Javascript和CSS?

在Firefox 42上测试。

古一Green2020/03/11 23:25:07

看起来FireBug小组正在研究EventBug扩展。它将在FireBug-Events中添加另一个面板。

“事件面板将按事件类型分组列出页面上的所有事件处理程序。对于每种事件类型,您都可以打开以查看侦听器绑定的元素以及函数源的摘要。” EventBug上升

尽管他们现在不能说何时发布。

西里Mandy2020/03/11 23:25:07

jQuery将事件存储在以下内容中:

$("a#somefoo").data("events")

做一个console.log($("a#somefoo").data("events"))应该列出附加到该元素的事件。

老丝飞云2020/03/11 23:25:06

我发现在最新的Chrome(v29)中使用DevTools,这两个技巧对于调试事件非常有帮助:

  1. 列出最后选择的DOM元素的 jQuery事件

    • 检查页面上的元素
    • 在控制台中键入以下内容:

      $ ._ data($ 0,“ events”)//假设jQuery 1.7+

    • 它将列出与之关联的所有jQuery事件对象,展开感兴趣的事件,右键单击“ handler”属性的功能,然后选择“ Show function definition”。它将打开包含指定功能的文件。

  2. 使用monitorEvents()命令

猴子十三2020/03/11 23:25:06

您可以使用FireQuery它显示了Firebug的HTML选项卡中附加到DOM元素的所有事件。它还显示通过附加到元素的任何数据$.data

Me无敌小哥2020/03/11 23:25:06

WebKit开发人员控制台(可在Chrome,Safari等中找到)可让您查看元素的附加事件。

有关堆栈溢出问题的更多详细信息

猿小小2020/03/11 23:25:06

有一个很好的小书签,称为Visual Event,可以显示附加到元素的所有事件。它具有用于不同类型事件(鼠标,键盘等)的彩色高亮显示。将鼠标悬停在它们上方时,它将显示事件处理程序的主体,其附加方式以及文件/行号(在WebKit和Opera上)。您也可以手动触发事件。

它找不到所有事件,因为没有标准的方法可以查找将什么事件处理程序附加到元素上,但是它可以与流行的库一起使用,例如jQuery,Prototype,MooTools,YUI等。