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

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

在每个页面上,我的控制台日志中肯定会出现一些“jQuery.Event”消息。当我断点时,我的调用堆栈以jQuery.even.dispatch.apply(eventHandle.elem,arguments)结尾,这给了我很多工作。

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

最佳答案

好的,看起来jQuery将所有事件绑定(bind)数据都隐藏在一个隐藏属性中。 This post描述了至少让您找出正在运行的内容的方式-找出处理程序在哪个文件中的位置仍然是您的责任。

在涉及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
}

10-07 13:27
查看更多