Ingernirated
@Ingernirated
Романыч

Как удалить привязанное событие функции с bind?

Всем привет!
Как удалить события, которые привязанные функцией с bind?
let box = document.querySelectorAll(".boxes");
function color(e) {
box[e].style.color = "red";
box[e].removeEventListener("click", color);
}
(for let i = 0; i < box.length; i++) {
box[i].addEventListener("click", color.bind(null, i));
}
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Надо передавать в removeEventListener ту же функцию, что вы передавали в addEventListener. То есть, все color.bind(null, i) надо сохранить - в какой-нибудь массив, например.

Однако, раз вы используете bind ради передачи индекса, можно поступить иначе - уберите bind, вместо этого назначайте элементам атрибут, значение которого затем надо будет достать из целевого элемента внутри вашего color'а.

А на самом деле, не надо ничего - ни bind, ни дополнительных атрибутов, индекс вообще передавать не надо. Вы ведь используете индекс для того, чтобы обратится к элементу, на котором и произошёл клик. Он будет доступен в обработчике как this и как event.target (event.currentTarget, если клик был на дочернем элементе).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы