$(窗口)的jQuery绑定/取消绑定“滚动”事件

我有这个function:

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

第一部分是应该的,但是当我稍后调用block_scroll(false)时,它仍然是阻塞的。 笏呢?

重新编辑所以build议我试着…

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

…有些困惑。 起初它不起作用 – 然后它工作。

现在我认为它失败了,因为我正在滚动block_scroll(false)被调用的那一刻。 我已经testing过几次了。 是的,如果我在脚本运行和block_scroll(false)被调用的时候什么也不做,它确实有效。 但是如果我在被调用的时候滚动的话。

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

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

更新

它工作,如果你使用单引号? 这听起来不对 – 就我所知,JavaScript将单引号和双引号视为相同(不像PHP和C等其他语言)。

请注意,提示使用unbind()的答案现在已经过期,因为该方法已被弃用 ,并将在未来版本的jQuery中被删除。

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

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

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

试试这个

 $.unbind('scroll'); 

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

你需要:

 unbind('scroll') 

目前你没有指定事件解除绑定。

非常古老的问题,但如果有人绊倒它,我会build议尝试:

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

尝试这个:

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

它在我的项目中工作