Stimulus — это лёгкий JavaScript-фреймворк, ориентированный на добавление поведения к HTML через декларативные атрибуты. Центральным элементом работы с Stimulus являются контроллеры, которые привязываются к DOM-элементам и управляют их поведением. Одной из ключевых возможностей контроллеров является обработка событий, причем знание событий по умолчанию для различных элементов позволяет писать код более чисто и эффективно.
Stimulus автоматически назначает события по умолчанию для действий (actions) в зависимости от типа HTML-элемента, к которому привязан контроллер. Если событие явно не указано, фреймворк использует предопределённое для этого тега событие. Это упрощает разработку, позволяя сосредоточиться на логике, а не на связывании событий вручную.
Кнопки (<button>), ссылки
(<a>) По умолчанию обрабатываются события
click. Это логично, так как основной интерактивный сигнал
для этих элементов — щелчок мыши.
Формы (<form>), поля ввода
(<input>), текстовые области
(<textarea>) По умолчанию для формы —
submit, для текстовых полей и textarea — input
или change в зависимости от типа элемента.
Элементы <select> Событие по
умолчанию — change, что отражает выбор пользователя из
списка.
Общие контейнеры (<div>,
<section>, <article>) Для
таких элементов нет явного события по умолчанию, поэтому рекомендуется
указывать событие явно (click, mouseover и
т.д.).
Stimulus использует атрибут data-action для связывания
событий с методами контроллера. Синтаксис позволяет указывать событие и
метод через пробел или двоеточие:
<button data-action="click->form#submit">Отправить</button>
Если событие не указано, Stimulus проверяет тип элемента и назначает событие по умолчанию. Например:
<button data-action="form#submit">Отправить</button>
Здесь click автоматически назначается, так как
<button> имеет событие по умолчанию
click.
Даже если элемент имеет событие по умолчанию, Stimulus позволяет явно указать другое событие:
<form data-action="keydown->form#submit">
<input type="text" name="name">
<button type="submit">Отправить</button>
</form>
В данном примере форма будет реагировать не на стандартное
submit, а на keydown, что удобно для
реализации отправки формы по нажатию Enter.
Stimulus поддерживает привязку нескольких событий к одному или разным методам контроллера:
<input type="text" data-action="input->search#update change->search#validate">
input — обновление результатов поиска в реальном
времени.change — дополнительная валидация после завершения
ввода.Такой подход позволяет разделять логику на отдельные методы, избегая перегрузки одного обработчика.
Кнопки внутри формы
<button type="submit"> инициирует событие
submit на родительской форме.<button type="button"> инициирует только
click, событие submit не генерируется.Checkbox и радио-кнопки
change, срабатывающее при изменении
состояния элемента.data-action, чтобы реагировать только на реальные
изменения.Файловые поля
(<input type="file">)
change, что позволяет запускать
обработку загруженных файлов сразу после выбора.Stimulus использует делегирование событий, что позволяет родительскому контроллеру реагировать на события от вложенных элементов. Это особенно полезно для динамически добавляемых элементов:
<div data-controller="list" data-action="click->list#select">
<button>Элемент 1</button>
<button>Элемент 2</button>
</div>
Контроллер list получает события click от
всех кнопок внутри контейнера, даже если кнопки создаются динамически
через JavaScript.
button,
a, input) можно опираться на события по
умолчанию, чтобы код был компактным.Использование событий по умолчанию в Stimulus делает код более декларативным и минималистичным, при этом обеспечивая гибкость через явное переопределение и поддержку множественных событий. Это позволяет создавать интерактивные интерфейсы с чистым HTML и контроллерами, без громоздкого JavaScript-кода.