События javascript внутри тегов
Сразу прошу, не минусуйте, пжлст, так как нужен совет, касаемо объявлений событий js внутри тегов. Я слышал много мнений тех, кто за, и кто против. Одни говорят, что объявлять события внутри тегов это не очень хорошая практика, а другая сторона утверждает обратное. Все таки, какие последствия может понести за собой объявление событий в тегах?!
Типа этого:
<div onlick="fname()">...</div>
Какие плюсы и минусы? Спасибо.
Ответы (2 шт):
В том и дело, что "много мнений тех, кто за, и кто против". Но всегда стоит смотреть на "хорошую практику". Есть определённые стандарты. Как у PHP его PSR, например.
Вообще, здесь стоит провести аналогию с CSS. Не стоит писать стили в инлайновом виде (внутри тегов), если можно вывести всё это в отдельный файл в отдельной директории.
То есть, <div style="border: 1px solid #ccc;">Content</div>.
Тоже самое и с JavaScript. Не стоит загрязнять код подобными вставками. Используйте селекторы по ID, классу или тегам, например. И уже из скрипта цепляйтесь с нужным элементам DOM-дерева.
Такой код самому легче поддерживать и другим. Чёткость и структурируемость кода - это признак профессионализма разработчика.
Я бы посоветовал Вам НЕ использовать инлайновый метод написания скриптов и стилей.
Последствия объявления событий в тегах:
- Скрипт в JS, а вызов функций из этого скрипта в HTML. Может быть не удобно перемещаться туда-сюда, и не подходит под идею разделения технологий. HTML должен быть для структуры документа, а не для действий.
- В тегах можно написать только одно событие, два onClick не получится повесить на один тег. А в JS можно вешать сколько угодно одинаковых обработчиков на один элемент методом
element.addEventListener(). - Написав событие в тег, вы теряете возможность использовать объект события типа Event, который даёт дополнительные возможности.
- Написанное в теге событие вы не можете удалить посредством HTML. Получается, что при надобности будете удалять через JS. И возникает вопрос почему они не добавляются там же в JS.
- При клонировании элементов через JS, будут клонироваться написанные в тегах события, чего не происходит при клонировании узлов с событиями, добавленными через JS.
- Один кусок HTML можно использовать для разных задач. Например применять к нему разный скрипт или делать из него элементы множество раз. Написанные в теги события будут мешать или усложнять.