Методи підключення подій в VanillaJS
Привіт! Мене звати Віктор, працюю front-end розробником 6 місяців.
Я маю практичний досвід використання популярних JavaScript фреймворків, таких як Vanilla.js, React та Vue. На робочому проєкті у мене були складності з підключенням подій на динамічні елементи, тому вирішив розібрати 5 методів підключення подій у JavaScript.
5 способів підключення подій у JavaScript
- Inline підключення
- Атрибут onclick до знайденого Element
- Метод addEventListener()
- Динамічне додавання елементів у DOM
- Підвішування обробника на батьківський елемент
Inline підключення
<button type="button" оnclick="alert(’click — 1’)">Click me</button>
Підключення через атрибут onclick до знайденого Element
<button id="button" type="button">Click me</button>
const $button = document.getElementById("button");$button.onclick = function() {alert("click — 2″);};
Метод addEventListener()
<button id="button" type="button">Click me</button>
const $button = document.getElementById("button");$button.addEventListener("click", function() {alert("click — 3″);});
// у метода є третій необов’язковий параметр options, код нижче означає, що функція визветься тільки один раз
const $buttonOnce = document.getElementById("button-once");$buttonOnce.addEventListener("click", function() {alert("click — 3 once");}, {once: true});// зазначу, обробник з анонімною функцією неможливо відключити, для цього функція повинна мати ім’я
$button.addEventListener("click", myFunction);// відключаємо
$button.removeEventListener("click", myFunction);Спосіб з динамічним додаванням елементів у DOM
<div id="wrapper"></div>
const $wrapper = document.getElementById("wrapper");const $button = document.createElement("button“);$button.innerHTML = “Click me”;
$button.addEventListener("click", function() {alert("click — 4″);});
$wrapper.append($button);
Підвішування обробника на батьківський елемент
Припустимо ми маємо декілька кнопок у компоненті, кожна з них має свою функцію — add, edit, delete.
<div id="js-buttons">
<button class="js-add">Add</button>
<button class="js-edit">Edit</button>
<button class="js-delete">Delete</button>
</div>
const buttons = document.getElementById("js-buttons");buttons.addEventListener("click", function(event) {const $target = event.target;
if ($target.classList.contains("js-add")) {alert("click — add 5″);} else if ($target.classList.contains("js-edit")) {alert("click — edit 5″);} else if ($target.classList.contains("js-delete")) {alert("click — delete 5″);};
});
27 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів