Статьи

Совет: делегирование событий JavaScript за 4 минуты

Делегирование событий может быть запутанной темой для тех, кто не знаком с концепцией. Но, к счастью, это действительно просто. В этом кратком видео-уроке я продемонстрирую концепцию всего за четыре минуты.

Представьте, что у вас есть пятьсот тегов привязки на вашей странице. Как вы можете себе представить, добавление события щелчка к каждому из них будет занимать много времени и не нужно. Кроме того, что произойдет, если после того, как вы нажмете на эти теги привязки, мы добавим дополнительные элементы привязки на страницу? Будут ли эти новые якоря связаны с событием клика? Ответ — нет. Затем вам придется заново присоединить слушателя к этим вновь созданным элементам.

Вместо этого, с делегированием событий, мы просто добавляем один прослушиватель событий к элементу-предку, возможно, что-то вроде «ul» Затем, когда пользователь нажимает на один из его дочерних элементов, таких как тег привязки, мы проверяем только, была ли цель щелчка на самом деле тегом привязки. Если это так, мы поступаем в обычном режиме.

  • Прикрепите только один прослушиватель событий к странице, а не пятьсот (в нашем примере)
  • Динамически созданные элементы по-прежнему будут связаны с обработчиком событий.

Это работает из-за того, как элементы захватываются (не IE) и всплывают. Например, рассмотрим следующую простую структуру.

1
2
3
<ul>
   <li><a href=»#»>Anchor</a></li>
</ul>

Когда вы нажимаете на тег привязки, вы также нажимаете на «li», «ul» и даже на элемент «body». Это называется пузыриться.

Пожалуйста, имейте в виду, что это простой пример для объяснения функциональности. Мы использовали jQuery только потому, что у меня было четыре минуты на запись! В этом конкретном примере (сначала посмотрите скринкаст) мы могли бы использовать два альтернативных варианта:

  1. Передайте true в качестве параметра метода clone (). Это затем клонирует элемент, а также любые обработчики событий.
  2. Вместо этого используйте метод live (). Однако будьте осторожны при использовании этого метода: он повторно подключает обработчик событий X раз. Это не обязательно может быть необходимо.

Главным образом, это должно было продемонстрировать идею. С обычным JavaScript вы можете сделать что-то вроде:

  • Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для получения лучших учебных материалов по веб-разработке.