цикле.
Я хочу передать ноду аргументом в функцию foo, которую указываю в качестве обработчика для EventListener.
Можно сделать с помощью bind
items.forEach((item, i) => item.addEventListener('click', foo.bind(null, item, i)))
или с помощью анонимной функции
items.forEach((item, i) => item.addEventListener('click', () => foo(item, i)))
В общем с передачей аргумента проблем нет. Есть проблема в удалении обработчика. Как добавить обработчик с аргументами, а потом его удалить?
Привет. Метод bind возвращает новую функцию, а removeEventListener должен получить ссылку на ту самую функцию, которая была установлена ранее в качестве обработчика. Значит, обработчики надо где-то хранить. Например, в массиве.
Подсказали в другом чате сделать вот так. И это работает!)) refs = items.map((item, i) => { const listener = () => foo(item, i) item.addEventListener('click', listener) return () => item.removeEventListener('click', listener) }
Обсуждают сегодня