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