23 lines
2.0 KiB
Markdown
23 lines
2.0 KiB
Markdown
---
|
||
name: feedback-no-inline-js
|
||
description: Никогда не писать inline JS-атрибуты (onchange/onclick/...) в HTML — только jQuery через .on()
|
||
metadata:
|
||
type: feedback
|
||
---
|
||
|
||
Пользователь прямо запретил inline JS-обработчики в HTML (`onchange="this.form.submit()"` и подобные) —
|
||
даже для мелочи вроде автосабмита `<select>` при смене значения.
|
||
|
||
**Why:** Явно сказал «никогда не пиши onchange="this.form.submit() такое в html» и прислал пример из
|
||
своего другого проекта — везде используется jQuery с делегированием событий через `.on()` на контейнер
|
||
(`$('#content').on('click', '#selector', fn)`), а не атрибуты `onXxx=` в разметке.
|
||
|
||
**How to apply:** Для любого интерактивного поведения (submit по смене select, клики, любые обработчики)
|
||
писать JS в отдельном файле (`App/media/js/*.js`, подключается через `$this->setScript('name.js')` — см.
|
||
`System\Classes\View`), с jQuery-биндингом `$(function () { $(container).on(event, selector, handler); })`.
|
||
Никаких `onclick=`/`onchange=`/`onsubmit=` и т.п. атрибутов в `.html`-шаблонах — даже одна строчка.
|
||
|
||
Это касается и уже написанного `System\Classes\ProfilerToolbar` (там сейчас `onclick` инлайном для
|
||
переключения панели/вкладок, самодостаточности ради) — при следующей правке этого файла стоит переписать
|
||
на тот же паттерн, если пользователь укажет, что это тоже нужно поправить (сейчас не просил явно).
|