$(窗口)上的jQuery绑定/取消绑定'scroll'事件

o01*_*o01 45 jquery bind unbind

我有这个功能:

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

第一部分按原样运行,但是当我稍后调用block_scroll(false)时 - 它仍然阻塞.笏呢?

重新编辑 所以我试过......

$(window).unbind("scroll");
Run Code Online (Sandbox Code Playgroud)

......有些困惑.起初它没有用 - 然后它起作用了.

现在我认为它失败了因为我在滚动的时候调用了block_scroll(false).我现在已经多次测试了这个.是的,如果我在脚本运行时没有做任何事情并且调用了block_scroll(false) - 它确实有效.但是,如果我在调用它时滚动它就不会.

ale*_*lex 69

$(window).unbind('scroll');
Run Code Online (Sandbox Code Playgroud)

即使文档说它将删除所有事件处理程序,如果没有参数调用,值得尝试明确解除绑定它.

更新

如果您使用单引号,它会起作用吗?这听起来不对 - 据我所知,JavaScript对单引号和双引号的处理方式相同(与PHP和C等其他语言不同).

  • @alex它实际上让我感觉更糟.:d (4认同)

Ror*_*san 15

请注意,建议使用的答案unbind()现已过时,因为该方法已被弃用,并将在未来的jQuery版本中删除.

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

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

$(window).off('scroll');
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供旧问题的更新!这绝对是迄今为止更准确的方法。 (2认同)