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 |
См. также
© 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