我需要调试一个Web应用程序,该应用程序使用jQuery执行一些相当复杂和混乱的DOM操作.在某一点上,一些绑定到特定元素的事件不会被触发,而只是停止工作.

如果我有能力编辑应用程序源代码,我会向下钻取并添加一组Firebug,console.log()个语句,并注释/取消注释代码片段,以try 查明问题所在.但是让我们假设我不能编辑应用程序代码,需要完全使用Firebug或类似工具在Firefox中工作.

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

有什么建议或 idea 吗?理想情况下,我只想查看和编辑绑定到元素的事件,类似于我今天编辑DOM的方式.

推荐答案

How to find event listeners on a DOM node.

简而言之,假设在某个时刻将一个事件处理程序附加到您的元素(例如:$('#foo').click(function() { console.log('clicked!') });

你这样判断它:

  • jQuery 1.3.十、

    var clickEvents = $('#foo').data("events").click;
    jQuery.each(clickEvents, function(key, value) {
      console.log(value) // prints "function() { console.log('clicked!') }"
    })
    
  • jQuery 1.4.x

    var clickEvents = $('#foo').data("events").click;
    jQuery.each(clickEvents, function(key, handlerObj) {
      console.log(handlerObj.handler) // prints "function() { console.log('clicked!') }"
    })
    

请参见jQuery.fn.data(其中jQuery在内部存储您的处理程序).

  • jQuery 1.8.x

    var clickEvents = $._data($('#foo')[0], "events").click;
    jQuery.each(clickEvents, function(key, handlerObj) {
      console.log(handlerObj.handler) // prints "function() { console.log('clicked!') }"
    })
    

Javascript相关问答推荐

在nodejs中使用快速路由的API路径

React中的表格中 Select Radio按钮

使用expressjs加载Nuxt版本=3.9.0(自定义服务器)

使用useParams路由失败

如何修复循环HTML元素附加函数中的问题?

深嵌套的ng-container元素仍然可以在Angular 布局组件中正确渲染内容吗?

传递一个大对象以在Express布局中呈现

被CSS优先级所迷惑

MongoDB中的引用

如何粗体匹配的字母时输入搜索框使用javascript?

用JavaScript复制C#CRC 32生成器

如何添加绘图条形图图例单击角形事件

setcallback是什么时候放到macrotask队列上的?

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

我想将Sitecore搜索面过滤器从多个转换为单个

Google脚本数组映射函数横向输出

打字脚本中方括号符号属性访问和拾取实用程序的区别

背景动画让网站摇摇欲坠

react -原生向量-图标笔划宽度

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync