Spec-Zone.ru › Web APIs

EventTarget: метод removeEventListener()

Базовая поддержка Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Метод removeEventListener() интерфейса EventTarget удаляет обработчик события, ранее зарегистрированный с помощью EventTarget.addEventListener(), от целевого объекта. Обработчик события, который нужно удалить, идентифицируется по типу события, функции-обработчику и различным необязательным параметрам, которые могут повлиять на процесс сопоставления; см. Сопоставление обработчиков событий для удаления.

Вызов removeEventListener() с аргументами, не идентифицирующими какой-либо зарегистрированный в настоящее время обработчик события на EventTarget, не оказывает никакого эффекта.

Если обработчик события удаляется из объекта EventTarget, в то время как другой обработчик этого объекта обрабатывает событие, он не будет запущен событием. Однако его можно снова подключить.

Предупреждение: Если обработчик зарегистрирован дважды, один с флагом capture установлен, а другой — нет, вы должны удалить каждый из них отдельно. Удаление обработчика с флагом capture не влияет на обработчик без флага capture, и наоборот.

Обработчики событий также можно удалить, передав AbortSignal в addEventListener(), а затем позже вызвав abort() на контроллере, владеющем этим сигналом.

Синтаксис

removeEventListener(type, listener)
removeEventListener(type, listener, options)
removeEventListener(type, listener, useCapture)

Параметры

type

Строка, определяющая тип события, для которого нужно удалить обработчик.

listener

Функция-обработчик события для удаления от целевого объекта.

options Необязательно

Объект опций, определяющий характеристики обработчика.

Доступные параметры:

  • capture: Булево значение, определяющее, зарегистрирован ли обработчик как обработчик захвата. Если параметр отсутствует, предполагается значение по умолчанию false.
useCapture Необязательно

Булево значение, определяющее, зарегистрирован ли обработчик как обработчик захвата. Если параметр отсутствует, предполагается значение по умолчанию false.

Возвращаемое значение

None.

Сопоставление обработчиков событий для удаления

После добавления обработчика события с помощью вызова addEventListener(), в какой-то момент может потребоваться его удалить. Очевидно, что для этого нужно указать те же параметры type и listener при вызове removeEventListener(). Но что насчёт параметров options или useCapture?

Хотя addEventListener() позволяет добавлять один и тот же обработчик несколько раз для одного типа, если опции различаются, единственный параметр, который removeEventListener() проверяет, — это флаг capture/useCapture.

Его значение должно совпадать для того, чтобы removeEventListener() совпадало, но другие значения не проверяются.

Например, рассмотрим этот вызов addEventListener():

element.addEventListener("mousedown", handleMouseDown, true);

Теперь рассмотрим каждый из этих двух вызовов removeEventListener():

element.removeEventListener("mousedown", handleMouseDown, false); // Fails
element.removeEventListener("mousedown", handleMouseDown, true); // Succeeds

Первый вызов терпит неудачу, потому что значение useCapture не совпадает. Второй вызов успешен, так как useCapture совпадает.

Теперь рассмотрим это:

element.addEventListener("mousedown", handleMouseDown, { passive: true });

Здесь мы передаём объект options, в котором passive задано значением true, в то время как другие параметры оставлены по умолчанию, то есть false.

Теперь рассмотрим каждый из этих вызовов removeEventListener() по очереди. Все вызовы, в которых capture или useCapture имеют значение true, терпят неудачу; остальные вызовы успешны.

Только значение параметра capture имеет значение для removeEventListener().

element.removeEventListener("mousedown", handleMouseDown, { passive: true }); // Succeeds
element.removeEventListener("mousedown", handleMouseDown, { capture: false }); // Succeeds
element.removeEventListener("mousedown", handleMouseDown, { capture: true }); // Fails
element.removeEventListener("mousedown", handleMouseDown, { passive: false }); // Succeeds
element.removeEventListener("mousedown", handleMouseDown, false); // Succeeds
element.removeEventListener("mousedown", handleMouseDown, true); // Fails

Стоит отметить, что некоторые версии браузеров имели несоответствия в этом аспекте, и, если у вас нет конкретных причин для другого поведения, рекомендуется использовать те же значения, которые были использованы при вызове addEventListener() при вызове removeEventListener().

Пример

В этом примере показано, как добавить обработчик события на основе mouseover для удаления обработчика события на основе click.

const body = document.querySelector("body");
const clickTarget = document.getElementById("click-target");
const mouseOverTarget = document.getElementById("mouse-over-target");

let toggle = false;
function makeBackgroundYellow() {
  body.style.backgroundColor = toggle ? "white" : "yellow";

  toggle = !toggle;
}

clickTarget.addEventListener("click", makeBackgroundYellow, false);

mouseOverTarget.addEventListener("mouseover", () => {
  clickTarget.removeEventListener("click", makeBackgroundYellow, false);
});

Спецификации

Спецификация
DOM
# ref-for-dom-eventtarget-removeeventlistener②

Совместимость с браузерами

Десктопные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android
removeEventListener 1 12 1 7 1 18 4 10.1 1 1.0 4.4
options_parameter 49 ≤18 49 36 10 49 49 36 10 5.0 49
useCapture_parameter_optional 1 12 6 11.6 1 18 6 12 1 1.0 4.4

См. также

  • EventTarget.addEventListener()

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API