removeEventListener() в JavaScript — зняти обробник події


Загальний опис

Метод removeEventListener() відіграє ключову роль у керуванні подіями у JavaScript, надаючи можливість динамічно відписуватися від подій, до яких елемент був підписаний. Це дає розробникам більше контролю над поведінкою веб-сторінок та додатків, дозволяючи оптимізувати ресурси та забезпечити кращу користувацьку взаємодію. Використання цього методу є важливим для уникнення витоків пам'яті, забезпечення високої продуктивності веб-додатків та управління поведінкою елементів у відповідь на дії користувачів.

Метод removeEventListener() викликається на елементі, з якого потрібно видалити обробник подій. Він приймає три аргументи: назву події, функцію обробника, яку потрібно видалити, та необов’язковий об’єкт опцій, що вказує, як слідкувати за подією.

Простий випадок:

Для ілюстрації використання методу розглянемо сценарій, де ми маємо кнопку, до якої додано обробник події кліку. Пізніше, з певних причин, нам може знадобитися видалити цей обробник події.

// Додавання обробника події
const button = document.querySelector('button');
function handleClick() {
    console.log('Кнопка натиснута');
}
button.addEventListener('click', handleClick);

// Видалення обробника події
button.removeEventListener('click', handleClick);

У цьому прикладі, спочатку ми додаємо обробник події до кнопки за допомогою addEventListener(), а потім видаляємо його за допомогою removeEventListener(), передавши ті самі аргументи.

Складніший випадок з опціями:

Якщо при додаванні обробника події було використано додаткові опції, наприклад capture або once, то при видаленні обробника необхідно вказати ці ж опції, щоб вказати, який саме обробник потрібно видалити.

// Додавання обробника події з опцією
button.addEventListener('click', handleClick, {capture: true});

// Видалення обробника події з тією ж опцією
button.removeEventListener('click', handleClick, {capture: true});

Використання removeEventListener() є суттєвим для розробників, що прагнуть створювати ефективні, відповідальні та високопродуктивні веб-додатки. Забезпечуючи можливість видалення непотрібних обробників подій, цей метод допомагає підтримувати чистоту коду та оптимізувати роботу веб-сторінок.

автор: Bond

Порада

Використання removeEventListener() є важливим для оптимізації продуктивності веб-додатків. Видалення непотрібних обробників подій допомагає уникнути витоків пам'яті, особливо в односторінкових додатках, де елементи DOM можуть динамічно додаватися та видалятися. Тому регулярно переглядайте свій код на предмет неактивних слухачів подій та видаляйте їх.

автор: Bond
Порада

Щоб забезпечити гнучке управління подіями, розгляньте можливість використання зовнішніх бібліотек або фреймворків, які надають більш зручний API для роботи з подіями. Втім, навіть при використанні таких інструментів, розуміння принципів роботи removeEventListener() залишається ключовим для ефективного управління ресурсами та підтримки чистоти коду.

автор: Bond
Порада

Коли ви використовуєте removeEventListener() для видалення обробника події з елемента, переконайтеся, що цей елемент все ще існує в DOM. Якщо елемент було видалено, спроби видалити обробник події з нього будуть марними. Також, якщо ви працюєте з динамічно генерованими елементами, забезпечте наявність механізму для відстеження та видалення обробників подій перед видаленням цих елементів з DOM.

автор: Bond

Синтаксис

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

Параметри

type

Рядок, який вказує тип події, для якої потрібно видалити обробник.

автор: Bond

listener

Функція-обробник події, яку потрібно видалити з цілі події.

автор: Bond

options

Об'єкт опцій, що визначає характеристики слухача подій.

автор: Bond

useCapture

Булеве значення, яке вказує, чи слухач події, якого потрібно видалити, зареєстрований як слухач на етапі захоплення. Якщо цей параметр відсутній, приймається значення за замовчуванням false.

автор: Bond

Повернення

undefined

Повертає undefined. Метод removeEventListener() не повертає жодного значення, він використовується виключно для видалення обробника події з об'єкта.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 7 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
14.5.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми демонструємо базове використання методу document.removeEventListener() для видалення обробника подій, який раніше був призначений елементу. Такий підхід є корисним для оптимізації ресурсів браузера та запобігання неочікуваній поведінці у випадку, коли обробник подій більше не потрібен.

HTML

<button id="myElement">Натисни</button>

JS

// Функція, яка викликається при кліку на елемент
function handleClick() {
    console.log("Елемент був натиснутий");
}

// Додаємо обробник події
document.getElementById("myElement").addEventListener("click", handleClick);

// Видаляємо обробник події
document.getElementById("myElement").removeEventListener("click", handleClick);
автор: Bond

У цьому прикладі ми реалізуємо сценарій, у якому обробник події автоматично видаляється після його першого виклику. Такий підхід є корисним, коли потрібно, щоб подія виконалася лише один раз, наприклад, при ініціалізації інтерактивних компонентів, які не вимагають повторного виконання.

HTML

<button id="uniqueElement">Натисни</button>

JS

function handleFirstClick() {
    console.log("Це повідомлення з'явиться лише один раз");

    // Видаляємо обробник події після його першого виклику
    document.getElementById("uniqueElement").removeEventListener("click", handleFirstClick);
}

// Додаємо обробник події, який буде видалений після першого виклику
document.getElementById("uniqueElement").addEventListener("click", handleFirstClick);
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід