【问题标题】:jQuery on scroll event not firing滚动事件上的jQuery未触发
【发布时间】:2015-03-04 16:10:55
【问题描述】:

我有一个应用程序进行了很多 ajax 操作。所以几乎我所有的事件都是这样处理的:

jQuery( 'body' ).on( 'click', '#id', function ( event ) {

    // Do something

});

代替:

jQuery( '#id' ).click( function() {

   // Do something

});

这适用于所有事件,除了这样的滚动事件不起作用:

jQuery( 'body' ).on( 'scroll', '#id', function ( event ) {

    // Do something

});

使用鼠标滚轮事件效果很好。有什么问题还是没有滚动事件?

【问题讨论】:

  • 您至少应该知道,将所有事件委托给正文并不是很好的做法,如果您有其他选项或可以使用的静态父元素,通常应该避免使用。

标签: javascript jquery events scroll


【解决方案1】:

问题在于 scroll 事件不会使 DOM 冒泡,因此使用 live()on()delegate() 的委托将不起作用。

您必须自己将事件处理程序绑定到动态创建的元素。

Reference

【讨论】:

  • 这似乎不是一个很好的解决方案。但可能它是唯一可行的......它也可能在每次 ajax 调用后同步事件处理程序,但我的代码有几千行...
【解决方案2】:

不确定这是否有帮助

$(window).on('scroll', function(){
   $("#head").html($(this).scrollTop());
});

JSfiddle

【讨论】:

  • 绝对不是,但谢谢。您的解决方案是滚动事件的标准 jquery 方式,但您不能将其绑定到运行时不在 dom 中的元素。所以对于所有动态创建的东西,这个解决方案是没有用的,除非你把它放入 ajax 响应本身(这正是 BenM 建议的)。
【解决方案3】:

为了能够触发 DOM 元素的滚动事件,你应该把它放在你的 css 中:

selector { overflow-y: scroll }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多