Что такое делегирование событий

Ответ

Делегирование событий — это подход, когда обработчик события назначается родительскому элементу, а не каждому дочернему элементу отдельно. События всплывают (bubble) от целевого элемента вверх по DOM, что позволяет перехватывать их на родителе.

Преимущества:

  • Экономит память (один обработчик вместо множества)
  • Работает с динамически добавляемыми элементами
  • Упрощает код для групп однотипных элементов

Пример:

document.querySelector('ul').addEventListener('click', (e) => {
  if (e.target.tagName === 'LI') {
    console.log('Кликнули по элементу списка:', e.target.textContent);
  }
});

Важно: Проверяйте e.target или используйте e.target.closest(селектор) для точного определения целевого элемента.

Ответ 18+ 🔞

А, слушай, вот тебе реально полезная штука, чтобы не выносить себе мозг. Делегирование событий, блядь! Это когда ты не вешаешь слушатель на каждую мелкую пылинку в DOM-дереве, а просто ставишь одного большого папашу-обработчика на их общего предка. Суть в чём, ёпта? События-то всплывают, как пузыри в болоте! Кликнул по кнопке — клик сначала на кнопке, потом на её диве, потом на body, и так до самого document. Мы этот всплывающий пузырь и ловим наверху. **И в чём же, блядь, кайф?** * **Памяти не жрёт, как свинья.** Один обработчик вместо овердохуища — и все дела. Представь, у тебя список из 100500 пунктов, и на каждый вешать — это же пиздец просто. * **С динамикой дружит.** Добавил ты новый элемент в DOM — а он уже автоматом под колпаком у родительского обработчика. Никаких перевешиваний, чих-пых — и работает. * **Код проще.** Одна функция на всю эту банду, а не куча одинаковых. **Смотри, как это выглядит в жизни:** ```javascript document.querySelector('ul').addEventListener('click', (e) => { if (e.target.tagName === 'LI') { console.log('Кликнули по элементу списка:', e.target.textContent); } }); ``` Видишь? Вешаемся на весь `
    `. А внутри проверяем: «Слушай, а цель клика — это вообще `
  • `?» Если да — тогда уже делаем свои дела. Красота! **Но тут, блядь, важный момент!** Смотри в оба на `e.target`. Он может указывать не на тот элемент, который ты ждёшь, если внутри твоего `
  • ` ещё какая-то хуйня, вроде иконки или ``. Кликнешь по иконке — `target` будет она, а не `
  • `. Для таких случаев есть `e.target.closest('селектор')` — он поднимается вверх от точки клика и ищет ближайшего родителя, который подходит под селектор. Вот это уже надёжно, блядь! Короче, делегируй, не парься. Один раз разобрался — и жизнь стала проще, как будто тебя в рот чих-пых!