Делегирование событий в JavaScript
В предыдущем уроке была описана проблема, возникающая при добавлении новых элементов, и приведено ее решение. В данном уроке мы рассмотрим более удачный способ обойти проблему - делегирование событий. Давайте его разберем.
Как вы уже знаете, кликая на li
, мы
одновременно кликаем и на ul
. Это
возможно благодаря всплытию событий. Мы можем
использовать это для решения нашей задачи:
навесим событие не на каждую li
, а
на их родителя ul
:
list.addEventListener('click', function() {
});
Теперь в обработчике события this
будет указывать на элемент, к которому привязан
обработчик, а event.target
- на элемент,
в котором случилось событие:
list.addEventListener('click', function(event) {
console.log(this); // наш список
console.log(event.target); // пункт списка
});
Сделаем так, чтобы li
, на которой
случился клик, в конец добавлялся восклицательный
знак:
list.addEventListener('click', function(event) {
event.target.textContent = event.target.textContent + '!';
});
Повторите приведенное решение. Убедитесь,
что новые li
также будут реагировать
на клик.