代码之家  ›  专栏  ›  技术社区  ›  o01

$(窗口)上的jQuery bind/unbind'scroll'事件

  •  44
  • o01  · 技术社区  · 15 年前

    我有这个功能:

    function block_scroll(key){
        if (key) {
            $(window).bind("scroll", function(){
                $('html, body').animate({scrollTop:0}, 'fast');
            });
        } else {
            $(window).unbind();
        }
    }
    

    第一部分正常工作,但当我稍后调用block_scroll(false)时,它仍然处于阻塞状态。什么事?

    重新编辑 所以正如我建议的那样我试着。。。

    $(window).unbind("scroll");
    

    ……有些困惑。一开始没用-后来就用了。

    现在我认为它失败了,因为我正在滚动block_scroll(false)被调用的那一刻。我已经测试过好几次了。是的,如果我在脚本运行时什么也不做,并且block_scroll(false)被调用,那么它确实可以工作。但如果我在叫它的时候滚动它就不会。

    6 回复  |  直到 12 年前
        1
  •  69
  •   alex    15 年前
    $(window).unbind('scroll');
    

    即使 documentation 表示如果调用时没有参数,它将删除所有事件处理程序,值得尝试显式解除绑定。

    更新

    如果你用单引号就行了?这听起来不对——据我所知,JavaScript对待单引号和双引号是一样的(不像其他一些语言,如PHP和C)。

        2
  •  15
  •   Rory McCrossan Hsm Sharique Hasan    9 年前

    注意,建议使用 unbind() 现在已经过时了 that method has been deprecated 并将在jQuery的未来版本中删除。

    从jQuery 3.0开始,.unbind()已被弃用。自jQuery 1.7以来,它被.off()方法取代,因此已经不鼓励使用它。

    相反,你现在应该使用 off() :

    $(window).off('scroll');
    
        3
  •  2
  •   pestaa    15 年前

    试试这个吧

    $.unbind('scroll');
    

    http://api.jquery.com/unbind/

        4
  •  1
  •   Coin_op    15 年前

    你需要:

    unbind('scroll')
    

    目前您没有指定要解除绑定的事件。

        5
  •  1
  •   DinoMyte    10 年前

    试试这个:

    $(window).unbind('scroll');
    

    它在我的项目中起作用

        6
  •  0
  •   hsuk    13 年前

    很老的问题,但如果有人偶然发现,我建议尝试:

    $j("html, body").stop(true, true).animate({
            scrollTop: $j('#main').offset().top 
    }, 300);