
Урок 09 · 12 хв
Події й форми
Клік, введення, надсилання форми — точки, у яких запускається твій код.
Доки на сторінці нічого не відбувається, твій код мовчить. Запускають його події: клік, введення в поле, надсилання форми. Ти вішаєш обробник і описуєш, що робити.
Перший аргумент — ім'я події рядком ("click", "input", "submit"), другий — функція, яку викличуть. Обробників на одному елементі може бути скільки завгодно: вони не затирають одне одного, а виконуються по черзі.
Форми
За замовчуванням submit перезавантажує сторінку й губить увесь стан. preventDefault() це скасовує. Обробник вішай на саму форму, а не на кнопку: тоді спрацює і клік по кнопці, і Enter у полі.
Делегування
Обробник висить на батькові й ловить кліки по всіх нащадках, бо подія спливає вгору деревом. Це єдиний зручний спосіб обробити елементи, яких ще немає: додав новий li — він запрацює сам, вішати нічого не треба.
event.target.closest("li")— найближчий відповідний предок, враховуючи сам елемент.if (!row) return— клік міг прийти повз, по порожньому місцю контейнера.- Зняти обробник можна лише за тим самим посиланням на функцію, яке вішав. Стрілку, написану просто у виклику, зняти не вийде.
- Для
submitмайже завжди потрібенpreventDefault. Для кліку по посиланню — теж, якщо обробляєш перехід сам.
- MDN · addEventListener — підписка на подію
- MDN · Event — що лежить в об'єкті події
- MDN · event.target — джерело події проти currentTarget
- MDN · preventDefault — скасувати поведінку браузера за замовчуванням
Перевірка
Закріпи, поки не пішов далі
1. Що буде, якщо не викликати
preventDefaultв обробнику submit?2. Клацнули по
spanусередині кнопки. Що лежить вevent.target?3. Навіщо вішати один обробник на батька, а не на кожен пункт?
4. Який тип у
input.valueдля поля зtype="number"?