Событие jQuery bind / unbind 'scroll' для $ (окно) - PullRequest
44 голосов
/ 11 ноября 2010

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

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

Первая часть работает как надо, но когда я позже вызываю block_scroll (false) - она ​​все еще блокируется. Ват делать?

RE-EDIT Итак, как я и предполагал, я пытался ...

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

... с некоторым замешательством. Сначала это не сработало, потом сработало.

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

Ответы [ 6 ]

66 голосов
/ 11 ноября 2010
$(window).unbind('scroll');

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

13 голосов
/ 27 марта 2017

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

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

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

$(window).off('scroll');
2 голосов
/ 11 ноября 2010

Попробуйте вместо этого

$.unbind('scroll');

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

1 голос
/ 11 ноября 2010

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

unbind('scroll')

В данный момент вы не указываете событие для отмены.

0 голосов
/ 24 апреля 2013

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

$j("html, body").stop(true, true).animate({
        scrollTop: $j('#main').offset().top 
}, 300);
0 голосов
/ 27 февраля 2013

попробуйте это:

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

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

...