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

时间:2010-11-11 13:36:25

标签: jquery bind unbind

我有这个功能:

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

第一部分可以正常工作,但是当我稍后调用block_scroll(false)时 - 它仍然阻塞。 Wat do?

RE-修改 所以我按照建议尝试了......

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

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

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

6 个答案:

答案 0 :(得分:66)

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

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

更新

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

答案 1 :(得分:12)

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

  

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

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

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

答案 2 :(得分:2)

试试这个

$.unbind('scroll');

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

答案 3 :(得分:1)

你需要:

unbind('scroll')

目前您没有指定要取消绑定的事件。

答案 4 :(得分:0)

试试这个:

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

它适用于我的项目

答案 5 :(得分:0)

非常古老的问题,但万一其他人偶然发现它,我建议尝试:

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