如何跟踪像onclick onblur这样的JavaScript事件?

时间:2008-09-18 10:05:44

标签: javascript debugging events

有没有办法在Internet Explorer 7中调试或跟踪每个JavaScript事件?

我有一个错误,阻止文本选择后滚动,我不知道哪个事件或操作会创建错误。我真的想看看当我移动鼠标时触发了哪些事件。

重新连接源是太多的工作了,我希望有一些像嗅探器一样向我展示所有被触发的事件。

10 个答案:

答案 0 :(得分:11)

遍历页面上定义了onXYZ函数的所有元素,然后将跟踪添加到它们:

var allElements = document.all; // Is this right? Anyway, you get the idea.

for (var i in allElements) {
    if (typeof allElements[i].onblur == "function") {
        var oldFunc = allElements[i].onblur;
        allElements[i].onblur = function() {
             alert("onblur called");
             oldFunc();
        };
    }
}

答案 1 :(得分:2)

您可能希望尝试Visual Studio 2008及其功能来调试JavaScript代码。

如果问题不是特定于Internet Explorer 7,但也出现在Firefox中,那么调试JavaScript代码的另一个好方法是Firefox和Firebug附加组件,它具有JavaScript调试器。然后,您还可以将console.log语句放入JavaScript代码中,然后您可以在Firebug中的控制台窗口中查看输出,而不是使用有时会使事件链陷入混乱的警报。 / p>

答案 2 :(得分:2)

@ [nickf] - 我非常确定document.all是特定于Internet Explorer的扩展程序。

你需要附加一个事件处理程序,没有办法只是“观察”事件。像Microsoft Ajax库的jQuery这样的框架将很容易为您提供添加事件处理程序的方法。由于它的选择器框架,jQuery很不错。

然后我使用Firebug(Firefox扩展)并输入断点。我发现Firebug比Visual Studio 2008更易于设置和拆卸。

答案 3 :(得分:1)

Borkdude说:

  

您可能希望尝试使用Visual Studio 2008及其功能来调试JavaScript代码。

我一直在多次攻击事件处理,在我看来,虽然经典的步进调试器对于跟踪长代码运行很有用,但它们并不擅长跟踪事件。想象一下,在每个事件中听老鼠移动事件并闯入另一个应用程序......所以在这种情况下,我强烈建议记录。

  

如果问题不是特定于Internet Explorer 7,而且也发生在Firefox中,那么调试JavaScript代码的另一个好方法是Firefox和Firebug附加组件,它有一个JavaScript调试器。

Internet Explorer也有Firebug Lite。我没有机会使用它,但它存在。 :-)它的缺点是它不是一个完全成熟的调试器,但它有一个window.console对象,这正是你需要的。

答案 4 :(得分:0)

这是基本的,但你可以在触发某些东西时粘贴警报或document.write调用。

答案 5 :(得分:0)

我不确定确切的代码(自编写复杂的JavaScript代码以来已经有一段时间了),但您可以枚举表单上的所有控件并附加一个事件,该事件在触发事件时输出内容。

您甚至可以使用匿名函数来包装必要的信息,以识别触发哪个事件。

答案 6 :(得分:0)

显而易见的方法是为各种事件设置一些警报,例如:

element.onclick = function () { alert('Click event'); }

否则,您可以选择将警报插入到某个地方的dom中。

但是,请认真考虑使用像jQuery这样的库来实现您的功能。很多跨浏览器问题都解决了问题,您无需再次解决它们。我不确定你想要实现的功能,但很可能有大量的滚动和为你可以使用的jQuery选择插件。

答案 7 :(得分:0)

我喜欢做的一件事是在JavaScript中创建一个绑定函数(就像在Prototype库中可以找到的那样),专门用于事件,以便它将“event”对象传递给绑定函数。现在,如果你要这样做,你可以简单地抛出一个跟踪调用,该调用将为每个使用它的处理程序调用。然后在不需要时将其删除。一个地方。容易。

但是,无论您如何获取要调用的trace语句,您仍然希望看到它。最佳策略是使用单独的窗格或窗口处理跟踪调用。 Dojo Toolkit有一个在Internet Explorer中运行的内置控制台,还有其他类似的东西。这样做的经典方法是创建一个新窗口并document.write

  • 我建议在每条曲目上附加日期时间。过去帮助了我很多。
  • 调试和警报通常对您没有帮助,因为它会中断正常的事件流。

答案 8 :(得分:0)

Matt Berseth可能会在 Debugging ASP.NET AJAX Applications with the Trace Console AjaxControlToolkit Control 中找到你想要的东西。

它基于雅虎YUI记录器 YUI 2: Logger

答案 9 :(得分:-1)

我的建议是,将FireFox与FireBug一起使用并使用内置的Debug / Trace对象。它们很有魅力。

相关问题