如何在大型Web应用程序中找到事件处理程序的附加位置?

时间:2014-09-23 15:05:47

标签: javascript jquery google-chrome debugging google-chrome-devtools

我正在尝试解决jQuery侦听器在一个页面上附加到DOM元素而不是另一个在我不熟悉的复杂Web应用程序中的另一个问题的问题。

问题: 有一个子菜单应该悬停在主菜单项上。页面有两个版本(Legacy和New),表面上应该运行非常相似的代码(页面内容略有不同,但UI代码表面上应该是相同的),两者都有这个菜单。

在Legacy版本中,菜单功能正常,但在新版本中,此子菜单不会在悬停时呈现。当我查看"事件监听器"下的Chrome开发工具时对于相关的DOM元素,我看到虽然旧版页面为mouseovermouseout附加了相应的处理程序,但新页面却没有。

我希望解决此问题的过程是找到在Legacy版本中附加事件侦听器的内容,然后通过调试来调查新版本中没有附加这些内容的原因。这是我遇到麻烦的地方。

以下是我对活动的看法:

mouseout:
     li.submenu:

handler: function (a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b}
arguments: null
caller: null
elem: li.submenu
length: 1
name: ""
prototype: Object
constructor: function (a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b}
__proto__: Object
__proto__: function Empty() {}
<function scope>
isAttribute: false
lineNumber: 3
listenerBody: "function (a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b}"
node: li.submenu
sourceName: "https://myServer.com/jquery/1.7.1/jquery-min.js"
type: "mouseout"
useCapture: false

我不确定如何使用此信息来查找附加此处理程序的实际代码,我需要查看该代码以确定此处理程序未在新页面版本中附加的原因。使用jQuery-min会使它复杂化,我无法换掉版本。

是否有一种方法可以使用此信息确定此处理程序的来源?

谢谢!

1 个答案:

答案 0 :(得分:1)

对于绑定事件,您需要选择元素。

您可以使用选择器 - li.submenu.submenu,并在所有JavaScript文件中搜索这两个字符串。这些选择器应该与jQuery的onbind或其他事件绑定方法(如addEventListener

一起使用
相关问题