Подтвердить что ты не робот

JQuery bind/unbind 'scroll' event на $(window)

У меня есть эта функция:

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-EDIT Поэтому, как я предложил, я попытался...

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

... с некоторой путаницей. Сначала это не сработало - тогда это сработало.

Теперь я думаю, что это провалилось, потому что я прокручивал момент, когда вызывался block_scroll (false). Я тестировал это несколько раз. И да, если я ничего не делаю, пока вызывается script и block_scroll (false), он работает. Но это не так, если я прокручиваю, когда он вызывал.

4b9b3361

Ответ 1

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

Несмотря на то, что документация говорит, что он удалит все обработчики событий, если вызывается без аргументов, стоит попробовать явно отпереть его.

Update

Это сработало, если вы использовали одинарные кавычки? Это звучит неправильно - насколько я знаю, JavaScript рассматривает одиночные и двойные кавычки одинаково (в отличие от некоторых других языков, таких как PHP и C).

Ответ 2

Обратите внимание, что ответы, предлагающие использовать unbind(), теперь устарели, поскольку этот метод устарел и будут удалены в будущем версии jQuery.

Как и в jQuery 3.0,.unbind() устарел. Он был заменен методом .off() с jQuery 1.7, поэтому его использование уже было обескуражено.

Вместо этого вы должны теперь использовать off():

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

Ответ 4

Вам необходимо:

unbind('scroll')

В настоящий момент вы не укажете, что событие будет отвязано.

Ответ 5

попробуйте следующее:

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

он работает в моем проекте

Ответ 6

Очень старый вопрос, но если кто-то еще наткнутся на него, я бы порекомендовал попробовать:

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