JavaScript виконання коду JavaScript підключення зовнішнього файлу JavaScript console.log JavaScript змінні і константи JavaScript типи даних JavaScript операції зі змінними JavaScript перетворення даних JavaScript масиви JavaScript умовні конструкції JavaScript цикли JavaScript функції JavaScript область видимості змінних JavaScript замикання і функції IIFE JavaScript Паттерн Модуль JavaScript рекурсивні функції JavaScript перевизначення функцій JavaScript hoisting JavaScript передача параметрів за значенням і за посиланням JavaScript стрілочні функції JavaScript ООП Object JavaScript ООП вкладені об'єкти і масиви в об'єктах JavaScript ООП перевірка наявності і перебір методів і властивостей JavaScript ООП об'єкти у функціях JavaScript ООП конструктори об'єктів JavaScript ООП розширення об'єктів. prototype JavaScript ООП інкапсуляція JavaScript ООП Функція як об'єкт. Методи call і apply JavaScript ООП спадкування JavaScript ООП Ключове слово this JavaScript ООП Object destructuring JavaScript ООП класи JavaScript ООП Date. Робота з датами JavaScript Об'єкт Math. математичні операції JavaScript Об'єкт Array. Робота з масивами JavaScript ООП об'єкт Number JavaScript String JavaScript String Об'єкт RegExp. Регулярні вирази JavaScript String Регулярні вирази в методах String JavaScript String Синтаксис регулярних виразів JavaScript Робота з браузером і BOM JavaScript діалогові вікна JavaScript Історія браузера. об'єкт history JavaScript об'єкт location JavaScript об'єкт navigator JavaScript таймери JavaScript DOM Введення JavaScript DOM Об'єкт document. Пошук елементів JavaScript DOM Властивості об'єкта document JavaScript DOM Об'єкт Node. Навігація по DOM JavaScript DOM Створення, додавання і видалення елементів веб-сторінки JavaScript DOM Об'єкт Element. управління елементами JavaScript DOM Зміна стилю елементів JavaScript події. Введення в обробку подій. JavaScript події обробники JavaScript події. об'єкт Event JavaScript події. поширення подій JavaScript події миші JavaScript події клавіатури JavaScript FORMS. Форми і їх елементи JavaScript FORMS. Кнопки JavaScript FORMS. текстові поля JavaScript FORMS. Прапорці та перемикачі JavaScript FORMS. Список select JavaScript JSON JavaScript зберігання даних. cookie JavaScript зберігання даних. Web Storage JavaScript Collection. Ітератори JavaScript Collection. Генератори JavaScript Collection. Множина Set JavaScript Collection. Map JavaScript Collection. WeakSet і WeakMap JavaScript AJAX. XMLHttpRequest JavaScript AJAX. Відправка даних JavaScript AJAX. Promise в Ajax-запитах

JavaScript події обробники


вбудовані обробники

У минулій темі були розглянуті вбудовані обробники (inline event handler), які визначаються в коді елемента за допомогою атрибутів:

<div id="rect" onclick="handler(event)"></div>

Хоча цей підхід прекрасно працює, але він має купу недоліків:

  • Код html змішується з кодом JavaScript, в зв'язку з чим стає важче розробляти, налагоджувати і підтримувати додаток

  • Обробники подій можна задати тільки для вже створених на веб-сторінці елементів. Динамічно створювані елементи в цьому випадку позбавляються можливості обробки подій

  • До елементу для однієї події може бути прикріплений тільки один обробник

  • Не можна видалити обробник без зміни коду


Властивості обробників подій

Проблеми, які виникають при використанні вбудованих обробників, були покликані вирішити властивості обробників. Подібно до того, як у html-елементів є атрибути для обробників, так і в коді javascript у елементів DOM ми можемо отримати властивості обробників, які відповідають атрибутам:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <style>
    #rect{
        width:50px;
        height:50px;
        background-color:blue;
    }
    </style>
</head>
<body>

<div id="rect"></div>

<script>

function handler(e){     
    alert(e.type);
}

document.getElementById("rect").onclick = handler;

</script>

</body>
</html>

У підсумку нам достатньо взяти властивість onclick і привласнити їй функцію, яка використовується в якості обробника. За рахунок цього код html відділяється від коду javascript.

Варто також відзначити, що в обробник події браузер автоматично передає об'єкт Event , який зберігає всю інформацію про подію. Тому також ми можемо отримати цей об'єкт в функції обробника в якості параметра.


слухачі подій

Незважаючи на те, що властивості оброблювачів вирішують ряд проблем, які пов'язані з використанням атрибутів, в той же час це також не оптимальний підхід. Ще один спосіб установки обробників подій представляє використання слухачів.

Для роботи зі слухачами подій в JavaScript є об'єкт EventTarget , який визначає методи addEventListener () (для додавання слухача) та removeEventListener () для видалення слухача. І оскільки html-елементи DOM теж є об'єктами EventTarget , то вони також мають ці методи. Фактично слухачі представляють ті ж функції обробників.

Метод addEventListener() приймає два параметри: назва події без префікса on і функцію обробника цієї події. наприклад:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <style>
    #rect{
        width:50px;
        height:50px;
        background-color:blue;
    }
    </style>
</head>
<body>

<div id="rect"></div>

<script>

var rect = document.getElementById("rect");
 
rect.addEventListener("click", function (e) {
    alert(e.type);
});

</script>
</body>
</html>

Тобто в даному випадку знову ж обробляється подія click . І також можна було б в якості другого параметра додати назву функції:

function handler(e){   
    alert(e.type);
}

var rect = document.getElementById("rect");
 
rect.addEventListener("click", handler);

Видалення слухача аналогічно додаванню:

rect.removeEventListener("click", handler);

Перевагою використання слухачів є і те, що ми можемо встановити для однієї події кілька функцій:

var clicks = 0;

function handlerOne(e){   
    alert(e.type);
}

function handlerTwo(e){
     
    clicks++;
    var newNode = document.createElement("p");
    newNode.textContent = "відбулось нажаття " + clicks;
    document.body.appendChild(newNode);
}

var rect = document.getElementById("rect");

// прикріплюємо перший обробник
rect.addEventListener("click", handlerOne);

//  прикріплюємо другий обробник
rect.addEventListener("click", handlerTwo);

Наш партнер:
beta test mp3 playlist downloader