Size: a a a

Love Frontend Chat

2021 April 02

A

Artur in Love Frontend Chat
Alexander Samoylov
Привет. Подскажите пожалуйста.

Я делаю addEventListener на DOM ноды в цикле.

Я хочу передать ноду аргументом в функцию 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)))

В общем с передачей аргумента проблем нет. Есть проблема в удалении обработчика. Как добавить обработчик с аргументами, а потом его удалить?
не понял зачем бинд, если тебе нужно не в зис прокинуть а тупо в аргумент
источник

A

Artur in Love Frontend Chat
а, второй вариант вижу
источник

A

Artur in Love Frontend Chat
чтобы удалить тебе нужно ссылки хранить
источник

A

Artur in Love Frontend Chat
а если удаление по условию то можно проще сделать
источник

A

Artur in Love Frontend Chat
прямо в функции и отписывать
источник

A

Artur in Love Frontend Chat
либо делаешь вместо форича мап, там возвращаешь ссылки на все листенеры + подписываешь их
источник

AS

Alexander Samoylov in Love Frontend Chat
Artur
чтобы удалить тебе нужно ссылки хранить
хм. Смотрю. Можно просто указать функцию, а потом в ней достучаться до DOM ноды через target. Теперь вопрос в другом: Как передать Index? 😂

Но суть остается та же, как передать аргумент в addEventListener
источник

A

Artur in Love Frontend Chat
Alexander Samoylov
хм. Смотрю. Можно просто указать функцию, а потом в ней достучаться до DOM ноды через target. Теперь вопрос в другом: Как передать Index? 😂

Но суть остается та же, как передать аргумент в addEventListener
если ты передашь лямбду, даже с одинаковой сигнатурой, то движок будет считать их разными функциями
источник

AS

Alexander Samoylov in Love Frontend Chat
Artur
либо делаешь вместо форича мап, там возвращаешь ссылки на все листенеры + подписываешь их
Уф. Сложно
источник

A

Artur in Love Frontend Chat
refs = items.map((item, i) =>
{
const listener = () => foo(item, i)
item.addEventListener('click', listener)
return  () => item.removeEventListener('click', listener)
}
источник

A

Artur in Love Frontend Chat
это подписка с сохранением в мапу функий отписки
источник

A

Artur in Love Frontend Chat
чтобы отписать все тупо refs.forEach(f => f())
источник

AS

Alexander Samoylov in Love Frontend Chat
Интересно. Буду пробовать. Спасибо
источник

AS

Alexander Samoylov in Love Frontend Chat
Интересный вариант
источник

A

Artur in Love Frontend Chat
Alexander Samoylov
Уф. Сложно
Да, чет сложновато получилось)
источник

AS

Alexander Samoylov in Love Frontend Chat
Artur
Да, чет сложновато получилось)
Работает. Гениально.
источник

AS

Alexander Samoylov in Love Frontend Chat
Спасибо большое
источник

AS

Alexander Samoylov in Love Frontend Chat
@fhnehfhneh

Наверняка передача аргумента в addEventListener распространенная задача.

Предложенный тобой вариант — это норм решение ?
источник

OH

Oscar Handsome in Love Frontend Chat
Kamil Ocean
Вот так вот штрафовали соцсеть:

➡️http://amp.gs/crOf

Видео: пресс-служба Таганского суда Москвы
Какие они блять тупые пидарасы
источник

OH

Oscar Handsome in Love Frontend Chat
Твиттеру же поебать на них
источник