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