У цій статті ми з вами розберемося як правильно використовувати обробники подій (addEventListener) в Javascript на різних елементах Дім дерева сторінок. Ці елементи можуть містити кнопки, посилання, зображення і таке інше. Будь-який DOM елемент запускає подіяколи ми з ним якось взаємодіємо (Кликаємо, наводимо мишу та ін.). Обробники подій в JS використовуються для того, щоб реагувати на ці події. Обробники подій можна "вішати" на будь-які елементи DOM (Data Object Model) дерева, а також глобальні об'єкти window та document. Припустимо, на нашій сторінці є html елемент button із класом "btn": Давайте виділимо наш елемент button і надамо його змінній button: Щоб повісити обробник подій на наш елемент button, потрібно використовувати спеціальний метод - addEventListener. Цей метод приймає 2 аргументи: Колбек функція (callback function) - відрізняється від звичайної функції тим, що її запускаємо не ми, а браузер, який робить це після спрацювання події. Таким чином, щоразу після спрацювання подіїclick"запускатиметься наша коллбек функція і ми будемо отримувати рядок "click" у нашій консолі. Ми також можемо винести нашу коллбек функцію за межі методу addEventListener, а всередині обробника подій просто посилатися на неї: Плюс такого підходу полягає у тому, що тепер ми легко можемо повторно використовувати логіку нашого оброблювача подій для інших елементів дерева дерева. Давайте використовувати готову логіку у функції handleClick – для нової кнопки: Щоб зняти обробник події з будь-якого елемента, потрібно використовувати метод removeEventListener. Як аргументи потрібно вказати не тільки назва події ("click"), але і назва коллбек функції, яка прив'язана елемента. Метод removeEventListener не спрацює, якщо як коллбек функції використовувати безіменну функцію, оскільки буде відсутні можливість послатися її у. Як використовувати обробник подій addEventListener, коли нам потрібно використовувати його відразу на кількох елементи? Припустимо, на нашій сторінці є 5 кнопок з класом "btn": У цьому випадку можна використати 2 підходиповісити на них обробник подій. Тут ми можемо виділити всі кнопки з однаковим класом та привласнити їх змінні buttons. Далі нам потрібно використовувати цикл forEach, щоб пробігтися по кожною кнопки в отриманому списку і повісити на неї обробник подій addEventListener. Тут основна ідея полягає в тому, що ми можемо ловити події, пов'язані з дочірніми елементами (яких може бути дуже багато), використовуючи єдиний Батьківський елемент. Тобто ми можемо повісити обробник подій на батьківський div з класом "wrapper", та обробляти події, які активуються на дочірніх елементах button. Це можливо завдяки механізму, який називається "спливання" (bubbling) в Javascript, який означає, що якщо подія спрацьовує на якомусь елементі, вона також спрацьовує на всіх батьківських елементах. Усередині нашої коллбек функції у нас є доступ до об'єкта "Подія"(Event), всередині якого ми можемо використовувати властивість target, щоб отримати елемент, на який ми клікнули. Прототипне наслідування Javascript (+ відео з прикладом) Підняття в JS (Hoisting в Javascript + 3 приклади) Слухач подій у JavaScript (addEventListener) — це метод, який дозволяє призначити функцію, яка буде виконуватись при настанні певної події на елементі DOM. Це потужний інструмент, який дозволяє створювати інтерактивні та чуйні веб-програми. Порівняно зі застарілим методом onEvent, використання addEventListener надає наступні переваги: Для використання addEventListener необхідно спочатку отримати посилання на елемент DOM, до якого потрібно прив'язати слухач подій. Наприклад, ми можемо отримати посилання на кнопку з id "myButton" таким чином: Потім ми можемо призначити слухач подій за допомогою методу addEventListener, вказавши тип події, яку ми хочемо відслідковувати (наприклад, "click"), та функцію, яка буде виконуватися при настанні цієї події. Наприклад, давайте додамо слухач події "click", який виводитиме повідомлення в консоль при натисканні на кнопку: Тепер, при кожному натисканні на кнопці з id "myButton", в консоль буде виводитися повідомлення "Кнопка була натиснута!". Крім того, можна додати додаткові параметри до addEventListener, щоб вказати, який тип слухача подій використовувати. Наприклад, ви можете вказати "true" як останній аргумент для використання слухача подій захоплення (capture), або "false" або опустити аргумент для використання слухача подій спливання (bubbling). Захоплення та спливання є двома різними способами обробки подій, які можуть бути корисними у різних сценаріях. Ось приклад, який показує використання спливаючого слухача подій: У цьому прикладі ми вказали значення "false" для використання слухача подій спливання. Крім того, addEventListener можна використовувати не тільки на елементах DOM, але і на об'єктах window або document. Наприклад, ви можете використовувати слухач подій вікна для виконання певних завдань під час завантаження сторінки або зміни розміру вікна: У цих прикладах ми додаємо слухачі подій "load" і "resize" на об'єкт window та прив'язуємо до них функції, які виконуються при завантаженні сторінки та зміні розміру вікна відповідно. Як видно з прикладів, addEventListener є потужним інструментом для роботи з подіями JavaScript. Він дозволяє створювати інтерактивні та чуйні веб-програми, а також надає безліч можливостей для контролю за поведінкою вашого веб-сайту або програми. Сподіваюся, ця розгорнута відповідь допоможе вам краще зрозуміти принцип роботи та приклади використання addEventListener у JavaScript. Слухач подій – це функція JavaScript, яка чекає на подію і відповідає на неї. JavaScript – це мова програмування, яку розробники використовують для створення інтерактивних веб-сторінок. За допомогою функції слухача подій JavaScript можна створювати власні реакції на такі події, як клацання миші, натискання на клавіатуру та зміна розміру вікна. Парадигма програмування, що передбачає очікування подій у реальному часі та реагування на них, називається обробкою подій. Функція слухача подій має ті ж характеристики, що й інші функції JavaScript. У разі активації ця функція виконує необхідні дії для обробки події. Наприклад, завдяки функції слухача подій можна змінювати текст, збирати інформацію з реєстраційних форм або зберігати дані в базах даних. Функція слухача подій відповідає правильному синтаксису JavaScript, як у прикладі.
document.getElementById("textdisplay1").innerHTML += "MouseClick happened" ; У цьому прикладі показано функцію слухача подій RespondMouseClick. Зазвичай назва функції пишеться так, щоб вона відповідала призначенню слухача. У функції ви пишете коди для виконання певних дій під час події. У цьому прикладі функція додає текст MouseClick happened до HTML-елементу textdisplay1. В якості альтернативи ви можете використовувати функцію обробника подій для відповіді на активовану подію, як показано в наведеному нижче прикладі.
if (event.type === "fullscreenchange")
console.log (“full screen toggle”);
console.log (“full screen error”); Таким чином, можна керувати кількома типами подій від певного елемента за допомогою однієї функції. Наприклад, ви можете зареєструвати слухач подій для обробки всіх типів подій блокчейна в програмах, що базуються на подіях. Для отримання додаткових відомостей див. у статті про створення програми, заснованої на подіях, за допомогою керованого блокчейну Amazon. Слухач подій буде активовано лише після додавання його до відповідного елемента JavaScript. Для цього ви можете використовувати наступний синтаксис: Наприклад, розробники можуть викликати наступну функцію, щоб прив'язати слухач подій натискання елемента кнопки. Також можна додати кілька слухачів подій до певного об'єкта події, не перезаписуючи існуючі обробники подій. Наприклад, Amazon Web Services (AWS) дозволяє розробникам об'єднувати кілька зворотних дзвінків для об'єкта AWS.Request. Для отримання додаткових відомостей див. у статті про використання слухача подій об'єкта запитів на AWS. Нижче наведено пояснення параметрів попереднього синтаксису. Слухачі подій залишаються активними доти, доки ви не видалите їх із зв'язаних елементів JavaScript. Для цього можна використовувати наступний синтаксис. element.removeEventListener(type, listener, useCapture); Параметри видалення слухача подій подібні до параметрів, які ви використовуєте для його додавання. При видаленні слухача подій необхідно вказати ті самі параметри типу, слухача і useCapture. Якщо цього не зробити, слухач подій залишатиметься активним і продовжуватиме спрацювати для майбутніх подій. Наприклад, можна додати подію за допомогою наступного коду. button.addEventListener("click", RespondMouseClick, true); Однак під час застосування наступного коду не вдається видалити слухача подій. Це пов'язано з тим, що значення useCapture відрізняється від значення, зареєстрованого об'єкті кнопки. button.removeEventListener("click", RespondMouseClick, false); Щоб успішно видалити подію та запобігти її запуску, ви можете використовувати наступний код. button.removeEventListener("click", RespondMouseClick, true); Вкладені слухачі подій – це обробники подій, додані до елементів HTML на різних ієрархічних рівнях. У прикладі HTML документ є власником батьківського елемента, а батьківський елемент – дочірнього. У складних веб-додатках може бути кілька батьківських та дочірніх верств із відповідними функціями слухачів подій.Коли відбувається певна подія, слухачі подій запускаються на різних рівнях у певному порядку. Наприклад, при натисканні на дочірню кнопку подія поширюватиметься на всі обробники, які фіксують натискання миші. Події можуть поширюватися у двох режимах: спливання та перехоплення. Випливання – це режим обробки подій JavaScript за промовчанням. Він поширює подію від самого внутрішнього шару до зовнішнього. Наприклад, користувач може навести курсор на текстове поле у дочірньому розділі. Потім програма може передати подію в наступному порядку: Щоб налаштувати спливання подій, використовуйте наступний синтаксис: Перехоплення подій – це спеціальний режим обробки подій у JavaScript, при якому подія поширюється всередину із зовнішнього шару. Як тільки подія досягає цільового елемента у внутрішньому шарі, режим обробки подій перетворюється на режим спливання. Потім у результаті випливання подія поширюється назовні до верхнього шару. Наприклад, користувач може натиснути на дочірню кнопку та запустити наступну послідовність дій: Сплив і перехоплення дозволяють по-різному керувати подіями. Режим спливання використовується рідко, оскільки перехоплення достатньо обробки більшості подій у додатках. Вибираючи між спливанням та перехопленням, слід враховувати процес поширення подій та його відповідність логіці програмування вашої програми. Наприклад, розглянемо батьківську форму, що складається із двох дочірніх елементів. Перший елемент вимагає негайного оновлення у разі виникнення події у другому елементі. У цьому випадку вам слід використовувати режим перехоплення. Завдяки йому батьківський слухач подій опрацьовує подію та оновлює перший елемент. Потім він передає керування слухачеві подій на другому дочірньому елементі. Події передаються доти, доки досягнуть кінцевого адресата як вкладеного слухача. Щоб запобігти подальшому поширенню події, необхідно використовувати певні методи. Наступний метод зупиняє подію у слухачі подій. Наприклад, якщо ви викликаєте StopPropagation дочірньою кнопкою подія клацання миші не пошириться на батьківський рівень і рівень документа. Таким чином, слухачі заходів вищого рівня не будуть активовані. StopPropagation зупиняє поширення подій лише поточного типу. Якщо в об'єкті зареєстровано різні типи слухачів подій, вони все одно спрацьовують, незважаючи на виклик команди StopPropagation. Щоб зупинити всі події, пов'язані з певним об'єктом, можна використовувати метод StopImmediatePropagation в такий спосіб. Коли один слухач подій викликає StopImmediatePropagationІнші слухачі, пов'язані з об'єктом, не запускаються. Amazon Web Services (AWS) пропонує SDK AWS для JavaScript, щоб ви могли легко використовувати сервіси у своїх додатках за допомогою бібліотек та API. SDK можна використовувати для розробки серверних, веб- та мобільних веб-додатків. SDK підтримує середовища виконання JavaScript, Node.JS та React Native, а також їх поєднання. Завдяки цьому розробники можуть запускати той самий пакет сервісів клієнта на різних платформах. Нижче наведено інші переваги використання SDK. Почніть роботу з програмами JavaScript, зареєструвавши обліковий запис AWS сьогодні.Обробники подій в JS (як працює addEventListener)
Обробники подій JS (виносимо логіку коллбек функції за межі методу addEventListener)
Як зняти обробник події addEventListener з елемента?
Обробка подій на кількох DOM елементах
Підхід 1. Використовуємо окрему addEventListener для кожної кнопки
2. Делегування події (Event delegation)
Додавання слухача подій у JavaScript
Переваги використання addEventListener
Використання addEventListener
const button = document.getElementById("myButton");
button.addEventListener("click", function() < console.log("Кнопка була натиснута!"); >);
button.addEventListener("click", function() < console.log("Кнопка була натиснута!"); >, false);
window.addEventListener("load", function() < console.log("Сторінка була завантажена!"); >); window.addEventListener("resize", function() < console.log("Розмір вікна було змінено!"); >);
Що таке слухач подій?
У чому полягає синтаксис функції слухача подій?
Синтаксис слухача подій
Синтаксис обробника подій
Як додати слухач подій?
Параметри додавання подій
Як видалити слухач подій?
Як працюють функції вкладеного слухача?
Випливання події
Перехоплення подій
Як вибрати між спливанням та перехопленням
Як зупинити поширення подій у функціях вкладених слухачів подій?
Зупинити поширення всіх подій
Як AWS забезпечує відповідність вашим вимогам до JavaScript?
1div
class="wrapper">
2
button
class="btn">Click/button>
3
/div>
1const
button
=
document.querySelector('.btn');
1const
button
=
document.querySelector('.btn');
2button.addEventListener('click',
function
()
3
console.log('click');
4
>);
1const
button
=
document.querySelector('.btn');
2
3
function
handleClick()
4
console.log('click');
5
>
6button.addEventListener('click',
handleClick);
1div
class="wrapper">
2
button
class="btn">Click/button>
3
button
class="btnTwo">Click
2/button>
4
/div>
1const
button
=
document.querySelector('.btn');
2
const
buttonTwo
=
document.querySelector('.btnTwo');
3
4
function
handleClick()
5
console.log('click');
6
>
7button.addEventListener('click',
handleClick);
8
9
// Вішаємо обробник подій із готовою логікою на нову кнопку
10buttonTwo.addEventListener('click',
handleClick);
1buttonTwo.removeEventListener('click',
handleClick);
1div
class="wrapper">
2
button
class="btn">Click
1/button>
3
button
class="btn">Click
2/button>
4
button
class="btn">Click
3/button>
5
button
class="btn">Click
4/button>
6
button
class="btn">Click
5/button>
7
/div>
1const
buttons
=
document.querySelectorAll('.btn');
2
3
function
handleClick()
4
console.log('click');
5
>
6
7buttons.forEach((button)
=>
8
button.addEventListener('click',
handleClick);
9
>);
1const
wrapper
=
document.querySelector('.wrapper');
2
3
function
handleClick(e)
4
console.log('click',
e.target);
5
// При натисканні отримуємо кожен конкретний елемент button
6
// click
7
// click
8
>
9
10wrapper.addEventListener('click',
handleClick);