49

我有这个功能:

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) 时什么都不做 - 它确实有效。但是如果我在调用它时滚动它就不会。

4

6 回答 6

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

尽管文档说如果不带参数调用它将删除所有事件处理程序,但值得尝试显式地取消绑定它。

更新

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

于 2010-11-11T13:39:56.503 回答
20

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

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

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

$(window).off('scroll');
于 2017-03-27T15:29:51.537 回答
2

试试这个

$.unbind('scroll');

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

于 2010-11-11T13:40:05.730 回答
2

试试这个:

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

它适用于我的项目

于 2013-02-27T07:12:23.797 回答
1

你需要:

unbind('scroll')

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

于 2010-11-11T13:40:19.687 回答
0

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

$j("html, body").stop(true, true).animate({
        scrollTop: $j('#main').offset().top 
}, 300);
于 2013-04-24T08:21:39.160 回答