В чем разница между 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);