Разделение проблем является ключевым здесь, и поэтому привязка событий является общепринятым методом. Это в основном то, что сказали многие из существующих ответов.
Однако не отбрасывайте идею декларативной разметки слишком быстро. У него есть свое место, и с такими рамками, как Angularjs, он является центральным.
Должно быть понимание того, что целое <div id="myDiv" onClick="divFunction()">Some Content</div>
было настолько постыдным, потому что им злоупотребляли некоторые разработчики. Таким образом, он достиг точки кощунственных масштабов, очень похоже tables
. Некоторые разработчики на самом деле избегаютtables
табличных данных. Это прекрасный пример того, как люди действуют без понимания.
Хотя мне нравится идея держать свое поведение отдельно от моих взглядов. Я не вижу проблем с разметкой, декларирующей, что она делает (не как она это делает, это поведение). Он может быть в форме фактического атрибута onClick или пользовательского атрибута, очень похожего на компоненты начальной загрузки javascript.
Таким образом, взглянув только на разметку, вы можете увидеть, что делает, вместо того, чтобы пытаться сторнировать подстановки событий поиска javascript.
Итак, в качестве третьей альтернативы вышеприведенному, использование атрибутов данных для декларативного объявления поведения в разметке. Поведение скрыто от глаз, но сразу видно, что происходит.
Пример начальной загрузки:
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Источник: http://getbootstrap.com/javascript/#popovers
Примечание . Основным недостатком второго примера является загрязнение глобального пространства имен. Это можно обойти, используя третью альтернативу, описанную выше, или фреймворки, такие как Angular и их атрибуты ng-click с автоматической областью действия.