我有这个功能:
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) - 它确实有效。但如果我在调用它时滚动它就不会。
答案 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)
答案 3 :(得分:1)
你需要:
unbind('scroll')
目前您没有指定要取消绑定的事件。
答案 4 :(得分:0)
试试这个:
$(window).unbind('scroll');
它适用于我的项目
答案 5 :(得分:0)
非常古老的问题,但万一其他人偶然发现它,我建议尝试:
$j("html, body").stop(true, true).animate({
scrollTop: $j('#main').offset().top
}, 300);