#javascript #dom-events
Вопрос:
Я только что узнал, что в современных браузерах можно навсегда отменить обработчики событий с помощью AbortSignal.
Вот небольшое доказательство концепции (проверьте эту ручку для демонстрации):
let container = () => document.getElementById('container');
let cancelButton = () => document.getElementById('cancel');
function main() {
let controller = new AbortController();
let signal = controller.signal;
container().addEventListener("click", function() {
alert("I'm being clicked!!!");
}, {signal});
cancelButton().addEventListener("click", function() {
alert('Ha ha!!! Your yellow square event is cancelled!!!');
controller.abort();
container().innerText = "click me no more";
});
}
Это работает. Однако в документах указывается следующее:
Интерфейс AbortController представляет объект контроллера, который позволяет прерывать один или несколько веб-запросов по мере необходимости.
Тем не менее, нигде в документации не указано, что:
- AbortController может быть применен к любому произвольному событию (в документе используется следующая терминология — запросы DOM, веб-запросы).
- Последствия его использования в точности эквивалентны вызову «removeEventListener».
Итак, мой вопрос в том, могу ли я использовать AbortController в качестве функциональной альтернативы removeEventListener
?
Ответ №1:
Согласно документам MDN ( options
параметр -> > signal
) — да, вы можете использовать AbortSignal.abort()
в качестве альтернативы removeEventListener
, так как:
Прослушиватель будет удален при вызове метода abort() данного сигнала прерывания.
Комментарии:
1. Согласно этой статье, это относится не ко всем браузерам — css-tricks.com/…
2. @shabunc это определенно не так.
AbortSignal.abort()
сама по себе она не пользуется такой широкой поддержкой .