В чем разница между jQuery off() и unbind()
Я использовал jQuery .bind()
и .unbind()
для обработки события анимации при прокрутке.
$(window).bind('scroll', function(){
... code ...
if(code_was_successful){
$(window).unbind(e);
}
});
Начиная с версии 1.7 (я использую 1.11), мы должны использовать .on()
и .off()
, но, похоже, .off()
не поддерживает обработчик событий, отменяющий привязку. Для обычных событий щелчка и тому подобного мне нужно было бы сохранить обработчик в переменной и настроить другой обработчик событий, чтобы отсоединить его (что противоречит цели), а для событий прокрутки это невозможно, поскольку .off()
требует селектора для отсоединения определенный обработчик, и события прокрутки не могут иметь его.
Какой современный способ сделать это?
Ответы
Ответ 1
Какой современный способ сделать это?
Используйте выражение с именем функции:
$(window).on('scroll', function handler(){
... code ...
if(code_was_successful){
$(window).off('scroll', handler);
}
});
.off() требует, чтобы селектор отвязывал определенный обработчик
Нет, нет. Точно так же, как .on
не требует селектора. Вам нужен только селектор, если вы хотите отменить делегированный обработчик событий.
Как вы можете прочитать в документации .off
о аргументе селектора:
Селектор, который должен соответствовать первому, переданному в .on() при прикреплении обработчиков событий.
Итак, если вы не использовали его в .on
, вы не используете его в .off
.
Ответ 2
вы можете использовать .on()
и .off()
так:
function scrollHandler(e){
if (myCondition) $(e.target).off('scroll', scrollHandler);
}
$(window).on('scroll', scrollHandler);