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), он работает. Но это не так, если я прокручиваю, когда он вызывал.
Ответы
Ответ 1
$(window).unbind('scroll');
Несмотря на то, что документация говорит, что он удалит все обработчики событий, если вызывается без аргументов, стоит попробовать явно отпереть его.
Update
Это сработало, если вы использовали одинарные кавычки? Это звучит неправильно - насколько я знаю, JavaScript рассматривает одиночные и двойные кавычки одинаково (в отличие от некоторых других языков, таких как PHP и C).
Ответ 2
Обратите внимание, что ответы, предлагающие использовать unbind()
, теперь устарели, поскольку этот метод устарел и будут удалены в будущем версии jQuery.
Как и в jQuery 3.0,.unbind() устарел. Он был заменен методом .off() с jQuery 1.7, поэтому его использование уже было обескуражено.
Вместо этого вы должны теперь использовать off()
:
$(window).off('scroll');
Ответ 3
Попробуйте это вместо
$.unbind('scroll');
http://api.jquery.com/unbind/
Ответ 4
Вам необходимо:
unbind('scroll')
В настоящий момент вы не укажете, что событие будет отвязано.
Ответ 5
попробуйте следующее:
$(window).unbind('scroll');
он работает в моем проекте
Ответ 6
Очень старый вопрос, но если кто-то еще наткнутся на него, я бы порекомендовал попробовать:
$j("html, body").stop(true, true).animate({
scrollTop: $j('#main').offset().top
}, 300);