13

我有一个有趣的错误发生,我不知道如何调试它。每次在我的网站上加载页面时,都会触发滚动事件。页面没有明显移动,我当然没有通过鼠标或键盘触发滚动。我知道滚动事件正在触发,因为我输入了一行代码

$(window).bind('scroll', function (e) {console.log(e)});

果然在每个页面上我都会在控制台日志中收到一点“jQuery.Event”消息。当我断点它时,我的调用堆栈以 jQuery.even.dispatch.apply(eventHandle.elem, arguments) 结束,这并没有给我很多工作。

这是问题。如何找出触发此滚动事件的原因?jquery 事件对象中是否有一个属性可以告诉我滚动是由用户触发还是由脚本触发?在这种情况下,你会怎么做才能解决这个问题?

4

1 回答 1

2

好吧,看起来 jQuery 将所有事件绑定数据隐藏在一个隐藏的属性中。这篇文章描述了让你至少知道正在运行什么的方法——找出处理程序在哪个文件中的位置仍然是你的责任。

在涉及事件的情况下scroll

var scrollHandlers = jQuery._data(window, 'events')['scroll'];
for (var i = 0; i < scrollHandlers.length; i++) {
    console.error(scrollHandlers[i].handler);  // or console.debug, whatever proves they exist
}
于 2014-08-17T21:22:27.677 回答