# Приём проектирования "поведение" Шаблон проектирования "поведение" (behavior) позволяет задавать хитрые обработчики на элементе *декларативно*, установкой специальных HTML-атрибутов и классов. [cut] Например, хочется, чтобы при клике на один элемент показывался другой. Конечно, можно поставить обработчик в атрибуте `onclick` или даже описать его где-нибудь в JS-коде страницы. Но есть решение другое, и очень изящное. ## Описание Приём проектирования "поведение" состоит из двух частей:
  1. Элементу ставится атрибут, описывающий его поведение.
  2. При помощи делегирования ставится обработчик на документ, который ловит все клики и, если элемент имеет нужный атрибут, производит нужное действие.
## Пример Например, я хочу, чтобы при клике на один элемент скрывался/показывался другой. Конечно, можно написать соответствующий обработчик в JavaScript. А что, если подобная задача возникает часто? Хотелось бы получить более простой способ задания такого *поведения*, например -- *декларативно*, при помощи особого атрибута. **Сделаем так, что при клике на элемент с атрибутом `data-toggle-id` будет скрываться/показываться элемент с заданным `id`.** ```html ``` **При помощи JavaScript мы добавили "поведение" -- возможность через атрибут указывать, что делает элемент.** [smart header="Не только атрибут"] Для своих целей мы можем использовать в HTML любые атрибуты, но стандарт рекомендует для своих целей называть атрибуты `data-*`. В обработчике `document.onclick` мы могли бы проверять не атрибут, а класс или что-то ещё. [/smart] Обратите внимание: обработчик поставлен на `document`, то есть клик на любом элементе страницы пройдёт через него. Теперь для того, чтобы добавить скрытие-раскрытие любому элементу -- даже не надо знать JavaScript, можно просто написать атрибут. Также для добавления обработчиков на `document` рекомендуется использовать `addEventListener`, чтобы можно было добавлять несколько различных поведений на документ. ## Итого Шаблон "поведение" удобен тем, что сколь угодно сложное JavaScript-поведение можно "навесить" на элемент одним лишь атрибутом. А можно -- несколькими атрибутами на связанных элементах. Здесь мы рассмотрели базовый пример, который можно как угодно модифицировать и масштабировать. Важно не переусердствовать. **Приём разработки "поведение" рекомендуется использовать для расширения возможностей разметки, как альтернативу мини-фрагментам JavaScript.** Далее у нас ещё будут задачи, где мы реализуем этот приём разработки.