SlideShare a Scribd company logo
1 of 29
Download to read offline
Події
Об'єктна модель документа (DOM) дозволяє
надати скриптам JavaScript можливість
реагувати на події в браузері.
Приклади HTML-подій:
• Клік мишкою на певному елементі
• Завантаження документа
• Завантаження зображення
• Наведення мишки на елемент
• Зміна поля у формі
• Надсилання форми
• Натискання клавіші
Обробка подій через атрибут HTML
Обробку події можна призначити у відповідному атрибуті тега.
<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<script>
function showDate() {
var date = new Date();
alert( date.toLocaleString("uk", {weekday: 'long',
day: 'numeric', month: 'long', year: 'numeric'}) );
}
</script>
</head>
<body>
<p onclick="alert('Тестовий клік')">Тестовий клік</p>
<input value="Кнопка" onclick="showDate()" type="button">
</body></html>
Зауваження:
Атрибути HTML нечутливі до регістру.
Працює ONCLICK, onCLICK.
Традиційно: onclick.
onclick="alert("Клік")" – не можна.
Можна так:
onclick="alert('Клік')",
або onclick='alert("Клік")',
або
onclick="alert(&quot;Клік&quot;)".
Задача 64
Доповніть фрагмент сторінки
<body>
<button onclick="countClicks()">Клікати
тут</button>
<p id="demo"></p>
</body>
кодом, який виводитиме в абзаці
demo кількість кліків по кнопці.
Розв’язок
<body>
<button onclick="countClicks()">Клікати тут</button>
<p id="demo"></p>
<script>
var counter = 0;
function countClicks() {
counter++;
document.getElementById("demo").innerHTML =
"Кількість кліків: " + counter;
}
</script>
</body>
Обробка подій через властивості DOM-об’єкта
Приклад:
<button id="myBtn">Спробуйте</button>
<p id="demo"></p>
<script>
document.getElementById("myBtn").onclick =
displayDate;
function displayDate() {
document.getElementById("demo").innerHTML =
Date();
}
</script>
Можна задати навіть компактніше:
myBtn.onclick = function() {
demo.innerHTML = Date();
};
Більше одного обробника призначати не можна.
<input type="button" id="elem" onclick="alert('Обробник
1')" value="Нажми мене" />
<script>
elem.onclick = function() { // перезапише обробник
alert( 'Обробник 2' ); // виведеться тільки це
};
</script>
Обробником можна призначити вже існуючу функцію:
function sayHello() {
alert( Привіт!' );
}
elem.onclick = sayHello;
Обробник можна ліквідувати:
elem.onclick = null;
Задача 65
Створіть кнопки з написами “Кнопка 1” і
“Кнопка 2”. Напишіть код, який при
натисканні на будь-яку з кнопок мінятиме
написи місцями. Використайте DOM-
властивості.
Розв’язок
<body>
<button id="btn1">Кнопка 1</button>
<button id="btn2">Кнопка 2</button>
<script>
btn1.onclick = funct1;
btn2.onclick = funct2;
function funct1() {
var temp = btn1.innerHTML
btn1.innerHTML = btn2.innerHTML;
btn2.innerHTML = temp;
}
function funct2() {
var temp = btn2.innerHTML
btn2.innerHTML = btn1.innerHTML;
btn1.innerHTML = temp;
}
</script>
</body>
Насправді тут можна обійтись тільки однією функцією:
<body>
<button id="btn1">Кнопка 1</button>
<button id="btn2">Кнопка 2</button>
<script>
btn1.onclick = funct1;
btn2.onclick = funct1;
function funct1() {
var temp = btn1.innerHTML
btn1.innerHTML = btn2.innerHTML;
btn2.innerHTML = temp;
}
</script>
</body>
Доступ до властивостей елемента через this
<h1 onclick="this.innerHTML='Інший текст'">Текст</h1>
Або
<h1 onclick="changeText(this)">Текст</h1>
<script>
function changeText(id) {
id.innerHTML = "Інший текст";
}
</script>
doSomething() і doSomething
Виклик функції через DOM – doSomething.
Виклик функції через HTML-атрибут - doSomething().
<button id="btn1" onclick="click1()">HTML-атрибут</button>
<button id="btn2">DOM</button>
<p id="demo"></p>
<script>
function click1() {
document.getElementById("demo").innerHTML = "Клік на
першій кнопці";
};
btn2.onclick = click2;
function click2() {
document.getElementById("demo").innerHTML = "Клік на
другій кнопці";
};
</script>
Задача 66
Створіть сторінку з абзацами “Абзац 1”,
“Абзац 2”, “Абзац 3”. Напишіть код, який
буде виводити під ними текст “Ви клікнули
на N-му абзаці”, де N – номер абзаца, на
якому клікнув користувач.
Розв’язок
<body>
<p id="par1">Абзац 1</p>
<p id="par2">Абзац 2</p>
<p id="par3">Абзац 3</p>
<p id="output"></p>
<script>
par1.onclick = showChar;
par2.onclick = showChar;
par3.onclick = showChar;
function showChar() {
var txt = this.innerHTML;
output.innerHTML = "Ви клікнули на " +
txt.charAt(txt.length-1) + "-му абзаці";
}
</script>
</body>
addEventListener і removeEventListener
Це сучасний спосіб призначати і видаляти обробники
подій, причому можна використовувати скільки
завгодно будь-яких обробників.
Синтаксис:
element.addEventListener(event,
handler[, phase]);
event – ім’я події (click, mousemover…),
handler – назва функції-обробника,
phase – необов’язковий параметр (про нього
– потім).
Зауваження: click, а не onclick!
Приклад:
<body>
<button id="myBtn">Try it</button>
<p id="demo"></p>
<script>
document.getElementById("myBtn").addEventListe
ner("click", displayDate);
function displayDate() {
document.getElementById("demo").innerHTML
= Date();
}
</script>
</body>
Можна так:
element.addEventListener("click",
function(){ alert("Hello World!"); });
(анонімна функція)
Але краще так:
element.addEventListener("click",
myFunction);
function myFunction() {
alert ("Hello World!");
}
Видалення обробника:
element.removeEventListener(event, handler[,
phase]);
Аргументи мають бути ті самі.
Приклад з трьома обробниками і з видаленням обробників.
<button id="myBtn">Try it</button>
<p id="demo"></p>
<script>
var x = document.getElementById("myBtn");
x.addEventListener("mouseover", myFunction);
x.addEventListener("click", mySecondFunction);
x.addEventListener("mouseout", myThirdFunction);
function myFunction() {
demo.innerHTML += "Moused over!<br>";
}
function mySecondFunction() {
demo.innerHTML += "Clicked!<br>";
x.removeEventListener("mouseover", myFunction);
x.removeEventListener("mouseout", myThirdFunction);
}
function myThirdFunction() {
demo.innerHTML += "Moused out!<br>";
}
</script>
Задача 67
Створіть сторінку, на якій генеруватиметься
маркований список з числами 1-20. Розмістіть
там ще два абзаци <p id="par1"></p> і <p
id="par2">0</p>. Напишіть код, який при
наведенні мишки на елементи списку буде
виводити відповідні числа у абзац par1, а при
кліках на них – виводити у par2 суму
відповідних чисел.
Підказки:
Подія наведення мишки – mouseover;
Перетворити величину x у числовий тип можна
так: +x або так: parseFloat(x).
Розв’язок
<ul>
<script>
var N = 20;
for (var i = 1; i <= N; i++) {
document.write("<li>" + i + "</li>");
}
</script>
</ul>
<p id="par1"></p> <p id="par2">0</p>
<script>
var lis = document.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
lis[i].addEventListener("mouseover", handleMouseOver);
lis[i].addEventListener("click", handleClick);
}
function handleMouseOver(){
par1.innerHTML = this.innerHTML;
}
function handleClick(){
par2.innerHTML = +par2.innerHTML + +this.innerHTML;
}
</script>
Деякі приклади подій
mouseover і mouseout
<div id="myDiv">Поводіть тут мишкою</div>
<script>
myDiv.addEventListener("mouseover", mOver);
myDiv.addEventListener("mouseout", mOut);
function mOver() {
this.innerHTML = "Дякую"
}
function mOut() {
this.innerHTML = "Поводіть тут мишкою"
}
</script>
Або:
<div onmouseover="mOver(this)"
onmouseout="mOut(this)" >
Поводіть тут мишкою</div>
<script>
function mOver(obj) {
obj.innerHTML = "Дякую"
}
function mOut(obj) {
obj.innerHTML = "Поводіть тут мишкою"
}
</script>
mousedown, mouseup і click
(onmousedown, onmouseup і onclick)
<div id=myDiv style="background-
color:#D94A38;width:90px;height:20px;padding:40px;">
Натисніть</div>
<script>
myDiv.addEventListener("mousedown", mDown);
myDiv.addEventListener("mouseup", mUp);
function mDown() {
this.style.backgroundColor = "#1ec5e5";
this.innerHTML = "Відпустіть";
}
function mUp() {
this.style.backgroundColor="#D94A38";
this.innerHTML="Дякую";
}
</script>
Або
<div onmousedown="mDown(this)" onmouseup="mUp(this)"
style="background-
color:#D94A38;width:90px;height:20px;padding:40px;
">
Натисніть</div>
<script>
function mDown(obj) {
obj.style.backgroundColor = "#1ec5e5";
obj.innerHTML = "Відпустіть";
}
function mUp(obj) {
obj.style.backgroundColor="#D94A38";
obj.innerHTML="Дякую";
}
</script>
load (onload)
Подія стається, коли об’єкт завантажується.
Приклади:
<body onload="myFunction()">
object.onload = function(){myScript}; //
використовується анонімна функція
object.addEventListener("load", myScript);
<img src="someimage.gif" onload="loadImage()"
width="100" height="132">
<script>
function loadImage() {
alert("Image is loaded");
}
</script>
Спливання і перехоплення
Якщо є кілька вкладених один в одного елементів,
події можна призначати кожному з них. Тоді, по
замовчуванню, порядок виконання – від внутрішніх
до зовнішніх. Це звуть спливанням (bubbling).
Приклад:
<div onclick="alert('DIV')">
<p onclick="alert('P')">
<span> 1 </span>
<span onclick="alert('SPAN')"> 2
</span>
<span> 3 </span>
</p>
</div>
Клік на 2 виводить SPAN, потім P, потім DIV.
Порядок виконання можна змінити на
протилежний, що називають перехопленням
(capturing ). Це робиться третім
(необов’язковим) параметром у
addEventListener, який, по
замовчуванню, дорівнює false. Отже, для
перехоплення треба писати так:
element.addEventListener("click",
myFunction, true);
Приклад:
<div id=myDiv>
<p id=myPar>
<span> 1 </span><span id=mySpan> 2 </span><span> 3 </span>
</p>
</div>
<script>
myDiv.addEventListener("click", clickDiv, true);
myPar.addEventListener("click", clickPar, true);
mySpan.addEventListener("click", clickSpan, true);
function clickDiv() {
alert("You clicked the DIV element!");
}
function clickPar() {
alert("You clicked the P element!");
}
function clickSpan() {
alert("You clicked the SPAN element!");
}
</script>
Властивість target
Властивість події target повертає елемент, на якому
спрацювала подія.
Приклад:
<body onclick="myFunction(event)">
<p>Клікніть, і дізнаєтесь, на чому клікнули</p>
<div><strong>Зауваження:</strong> target повертає
елемент, на якому спрацювала подія, але не обов’язково
елемент, якому призначений eventlistener.</div>
<script>
function myFunction(event) {
alert(event.target.tagName);
}
</script>
</body>

More Related Content

Similar to Coding for Future in Lutsk. JavaScript. Part 14 (6)

"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
 
Twig in symfony
Twig in symfonyTwig in symfony
Twig in symfony
 
Lec12 користувацькi елементи керування ed
Lec12 користувацькi елементи керування edLec12 користувацькi елементи керування ed
Lec12 користувацькi елементи керування ed
 
Theme25-jQuery2
Theme25-jQuery2Theme25-jQuery2
Theme25-jQuery2
 
24
2424
24
 
23
2323
23
 

More from Олег Вілігурський

More from Олег Вілігурський (20)

JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
 
Python для фізиків. Вступ. Лабораторні роботи
Python для фізиків. Вступ. Лабораторні роботиPython для фізиків. Вступ. Лабораторні роботи
Python для фізиків. Вступ. Лабораторні роботи
 
Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.
 
Python for physicists. introduction
Python for physicists. introductionPython for physicists. introduction
Python for physicists. introduction
 
Theme23-oop2(end)
Theme23-oop2(end)Theme23-oop2(end)
Theme23-oop2(end)
 
Theme23-oop2
Theme23-oop2Theme23-oop2
Theme23-oop2
 
Theme22-OOP
Theme22-OOPTheme22-OOP
Theme22-OOP
 
Theme21_json
Theme21_jsonTheme21_json
Theme21_json
 
Theme20_ajax
Theme20_ajaxTheme20_ajax
Theme20_ajax
 
Theme19_css
Theme19_cssTheme19_css
Theme19_css
 
Theme18_css
Theme18_cssTheme18_css
Theme18_css
 
Theme17a css
Theme17a cssTheme17a css
Theme17a css
 
Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10
 
Coding for Future in Lutsk. JavaScript. Part 9
Coding for Future in Lutsk. JavaScript. Part 9Coding for Future in Lutsk. JavaScript. Part 9
Coding for Future in Lutsk. JavaScript. Part 9
 
Coding for Future in Lutsk. JavaScript. Part 8
Coding for Future in Lutsk. JavaScript. Part 8Coding for Future in Lutsk. JavaScript. Part 8
Coding for Future in Lutsk. JavaScript. Part 8
 
Coding for Future in Lutsk. JavaScript. Part 7
Coding for Future in Lutsk. JavaScript. Part 7Coding for Future in Lutsk. JavaScript. Part 7
Coding for Future in Lutsk. JavaScript. Part 7
 
Coding for Future in Lutsk. JavaScript. Part 6
Coding for Future in Lutsk. JavaScript. Part 6Coding for Future in Lutsk. JavaScript. Part 6
Coding for Future in Lutsk. JavaScript. Part 6
 
Coding for Future in Lutsk. JavaScript. Part 5
Coding for Future in Lutsk. JavaScript. Part 5Coding for Future in Lutsk. JavaScript. Part 5
Coding for Future in Lutsk. JavaScript. Part 5
 
Coding for Future in Lutsk. JavaScript. Part 4
Coding for Future in Lutsk. JavaScript. Part 4Coding for Future in Lutsk. JavaScript. Part 4
Coding for Future in Lutsk. JavaScript. Part 4
 
Coding for Future in Lutsk. JavaScript. Part 3
Coding for Future in Lutsk. JavaScript. Part 3Coding for Future in Lutsk. JavaScript. Part 3
Coding for Future in Lutsk. JavaScript. Part 3
 

Recently uploaded

Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Collaborator.pro
 
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
ssuser7541ef1
 

Recently uploaded (13)

Презентація про виникнення балади., особливості
Презентація про виникнення балади., особливостіПрезентація про виникнення балади., особливості
Презентація про виникнення балади., особливості
 
Особливості застосування інструментарію оцінювання готовності дитини до навча...
Особливості застосування інструментарію оцінювання готовності дитини до навча...Особливості застосування інструментарію оцінювання готовності дитини до навча...
Особливості застосування інструментарію оцінювання готовності дитини до навча...
 
Графіки відключень у Вінниці і області на 2024 рік
Графіки відключень у Вінниці і області на 2024 рікГрафіки відключень у Вінниці і області на 2024 рік
Графіки відключень у Вінниці і області на 2024 рік
 
Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...
Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...
Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...
 
Пасивний будинок Енергоефективність ОБСБД.pptx
Пасивний будинок Енергоефективність ОБСБД.pptxПасивний будинок Енергоефективність ОБСБД.pptx
Пасивний будинок Енергоефективність ОБСБД.pptx
 
Ім’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВ
Ім’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВІм’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВ
Ім’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВ
 
Хвороби картоплі та заходи боротьби з ними
Хвороби картоплі та заходи боротьби з нимиХвороби картоплі та заходи боротьби з ними
Хвороби картоплі та заходи боротьби з ними
 
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
 
70 років тому – початок Кенгірського повстання
70 років тому – початок Кенгірського повстання70 років тому – початок Кенгірського повстання
70 років тому – початок Кенгірського повстання
 
Графіки стабілізаційних відключень у Чернігові та області
Графіки стабілізаційних відключень у Чернігові та областіГрафіки стабілізаційних відключень у Чернігові та області
Графіки стабілізаційних відключень у Чернігові та області
 
Альфрейні опорядження поверхонь ТООРтаПД.pptx
Альфрейні опорядження поверхонь ТООРтаПД.pptxАльфрейні опорядження поверхонь ТООРтаПД.pptx
Альфрейні опорядження поверхонь ТООРтаПД.pptx
 
80 років від часу депортації з Криму кримських татар і осіб інших національно...
80 років від часу депортації з Криму кримських татар і осіб інших національно...80 років від часу депортації з Криму кримських татар і осіб інших національно...
80 років від часу депортації з Криму кримських татар і осіб інших національно...
 
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
 

Coding for Future in Lutsk. JavaScript. Part 14

  • 1. Події Об'єктна модель документа (DOM) дозволяє надати скриптам JavaScript можливість реагувати на події в браузері. Приклади HTML-подій: • Клік мишкою на певному елементі • Завантаження документа • Завантаження зображення • Наведення мишки на елемент • Зміна поля у формі • Надсилання форми • Натискання клавіші
  • 2. Обробка подій через атрибут HTML Обробку події можна призначити у відповідному атрибуті тега. <!DOCTYPE html> <html><head> <meta charset="utf-8"> <script> function showDate() { var date = new Date(); alert( date.toLocaleString("uk", {weekday: 'long', day: 'numeric', month: 'long', year: 'numeric'}) ); } </script> </head> <body> <p onclick="alert('Тестовий клік')">Тестовий клік</p> <input value="Кнопка" onclick="showDate()" type="button"> </body></html>
  • 3. Зауваження: Атрибути HTML нечутливі до регістру. Працює ONCLICK, onCLICK. Традиційно: onclick. onclick="alert("Клік")" – не можна. Можна так: onclick="alert('Клік')", або onclick='alert("Клік")', або onclick="alert(&quot;Клік&quot;)".
  • 4. Задача 64 Доповніть фрагмент сторінки <body> <button onclick="countClicks()">Клікати тут</button> <p id="demo"></p> </body> кодом, який виводитиме в абзаці demo кількість кліків по кнопці.
  • 5. Розв’язок <body> <button onclick="countClicks()">Клікати тут</button> <p id="demo"></p> <script> var counter = 0; function countClicks() { counter++; document.getElementById("demo").innerHTML = "Кількість кліків: " + counter; } </script> </body>
  • 6. Обробка подій через властивості DOM-об’єкта Приклад: <button id="myBtn">Спробуйте</button> <p id="demo"></p> <script> document.getElementById("myBtn").onclick = displayDate; function displayDate() { document.getElementById("demo").innerHTML = Date(); } </script> Можна задати навіть компактніше: myBtn.onclick = function() { demo.innerHTML = Date(); };
  • 7. Більше одного обробника призначати не можна. <input type="button" id="elem" onclick="alert('Обробник 1')" value="Нажми мене" /> <script> elem.onclick = function() { // перезапише обробник alert( 'Обробник 2' ); // виведеться тільки це }; </script> Обробником можна призначити вже існуючу функцію: function sayHello() { alert( Привіт!' ); } elem.onclick = sayHello; Обробник можна ліквідувати: elem.onclick = null;
  • 8. Задача 65 Створіть кнопки з написами “Кнопка 1” і “Кнопка 2”. Напишіть код, який при натисканні на будь-яку з кнопок мінятиме написи місцями. Використайте DOM- властивості.
  • 9. Розв’язок <body> <button id="btn1">Кнопка 1</button> <button id="btn2">Кнопка 2</button> <script> btn1.onclick = funct1; btn2.onclick = funct2; function funct1() { var temp = btn1.innerHTML btn1.innerHTML = btn2.innerHTML; btn2.innerHTML = temp; } function funct2() { var temp = btn2.innerHTML btn2.innerHTML = btn1.innerHTML; btn1.innerHTML = temp; } </script> </body>
  • 10. Насправді тут можна обійтись тільки однією функцією: <body> <button id="btn1">Кнопка 1</button> <button id="btn2">Кнопка 2</button> <script> btn1.onclick = funct1; btn2.onclick = funct1; function funct1() { var temp = btn1.innerHTML btn1.innerHTML = btn2.innerHTML; btn2.innerHTML = temp; } </script> </body>
  • 11. Доступ до властивостей елемента через this <h1 onclick="this.innerHTML='Інший текст'">Текст</h1> Або <h1 onclick="changeText(this)">Текст</h1> <script> function changeText(id) { id.innerHTML = "Інший текст"; } </script>
  • 12. doSomething() і doSomething Виклик функції через DOM – doSomething. Виклик функції через HTML-атрибут - doSomething(). <button id="btn1" onclick="click1()">HTML-атрибут</button> <button id="btn2">DOM</button> <p id="demo"></p> <script> function click1() { document.getElementById("demo").innerHTML = "Клік на першій кнопці"; }; btn2.onclick = click2; function click2() { document.getElementById("demo").innerHTML = "Клік на другій кнопці"; }; </script>
  • 13. Задача 66 Створіть сторінку з абзацами “Абзац 1”, “Абзац 2”, “Абзац 3”. Напишіть код, який буде виводити під ними текст “Ви клікнули на N-му абзаці”, де N – номер абзаца, на якому клікнув користувач.
  • 14. Розв’язок <body> <p id="par1">Абзац 1</p> <p id="par2">Абзац 2</p> <p id="par3">Абзац 3</p> <p id="output"></p> <script> par1.onclick = showChar; par2.onclick = showChar; par3.onclick = showChar; function showChar() { var txt = this.innerHTML; output.innerHTML = "Ви клікнули на " + txt.charAt(txt.length-1) + "-му абзаці"; } </script> </body>
  • 15. addEventListener і removeEventListener Це сучасний спосіб призначати і видаляти обробники подій, причому можна використовувати скільки завгодно будь-яких обробників. Синтаксис: element.addEventListener(event, handler[, phase]); event – ім’я події (click, mousemover…), handler – назва функції-обробника, phase – необов’язковий параметр (про нього – потім). Зауваження: click, а не onclick!
  • 16. Приклад: <body> <button id="myBtn">Try it</button> <p id="demo"></p> <script> document.getElementById("myBtn").addEventListe ner("click", displayDate); function displayDate() { document.getElementById("demo").innerHTML = Date(); } </script> </body>
  • 17. Можна так: element.addEventListener("click", function(){ alert("Hello World!"); }); (анонімна функція) Але краще так: element.addEventListener("click", myFunction); function myFunction() { alert ("Hello World!"); } Видалення обробника: element.removeEventListener(event, handler[, phase]); Аргументи мають бути ті самі.
  • 18. Приклад з трьома обробниками і з видаленням обробників. <button id="myBtn">Try it</button> <p id="demo"></p> <script> var x = document.getElementById("myBtn"); x.addEventListener("mouseover", myFunction); x.addEventListener("click", mySecondFunction); x.addEventListener("mouseout", myThirdFunction); function myFunction() { demo.innerHTML += "Moused over!<br>"; } function mySecondFunction() { demo.innerHTML += "Clicked!<br>"; x.removeEventListener("mouseover", myFunction); x.removeEventListener("mouseout", myThirdFunction); } function myThirdFunction() { demo.innerHTML += "Moused out!<br>"; } </script>
  • 19. Задача 67 Створіть сторінку, на якій генеруватиметься маркований список з числами 1-20. Розмістіть там ще два абзаци <p id="par1"></p> і <p id="par2">0</p>. Напишіть код, який при наведенні мишки на елементи списку буде виводити відповідні числа у абзац par1, а при кліках на них – виводити у par2 суму відповідних чисел. Підказки: Подія наведення мишки – mouseover; Перетворити величину x у числовий тип можна так: +x або так: parseFloat(x).
  • 20. Розв’язок <ul> <script> var N = 20; for (var i = 1; i <= N; i++) { document.write("<li>" + i + "</li>"); } </script> </ul> <p id="par1"></p> <p id="par2">0</p> <script> var lis = document.getElementsByTagName('li'); for (var i = 0; i < lis.length; i++) { lis[i].addEventListener("mouseover", handleMouseOver); lis[i].addEventListener("click", handleClick); } function handleMouseOver(){ par1.innerHTML = this.innerHTML; } function handleClick(){ par2.innerHTML = +par2.innerHTML + +this.innerHTML; } </script>
  • 21. Деякі приклади подій mouseover і mouseout <div id="myDiv">Поводіть тут мишкою</div> <script> myDiv.addEventListener("mouseover", mOver); myDiv.addEventListener("mouseout", mOut); function mOver() { this.innerHTML = "Дякую" } function mOut() { this.innerHTML = "Поводіть тут мишкою" } </script>
  • 22. Або: <div onmouseover="mOver(this)" onmouseout="mOut(this)" > Поводіть тут мишкою</div> <script> function mOver(obj) { obj.innerHTML = "Дякую" } function mOut(obj) { obj.innerHTML = "Поводіть тут мишкою" } </script>
  • 23. mousedown, mouseup і click (onmousedown, onmouseup і onclick) <div id=myDiv style="background- color:#D94A38;width:90px;height:20px;padding:40px;"> Натисніть</div> <script> myDiv.addEventListener("mousedown", mDown); myDiv.addEventListener("mouseup", mUp); function mDown() { this.style.backgroundColor = "#1ec5e5"; this.innerHTML = "Відпустіть"; } function mUp() { this.style.backgroundColor="#D94A38"; this.innerHTML="Дякую"; } </script>
  • 24. Або <div onmousedown="mDown(this)" onmouseup="mUp(this)" style="background- color:#D94A38;width:90px;height:20px;padding:40px; "> Натисніть</div> <script> function mDown(obj) { obj.style.backgroundColor = "#1ec5e5"; obj.innerHTML = "Відпустіть"; } function mUp(obj) { obj.style.backgroundColor="#D94A38"; obj.innerHTML="Дякую"; } </script>
  • 25. load (onload) Подія стається, коли об’єкт завантажується. Приклади: <body onload="myFunction()"> object.onload = function(){myScript}; // використовується анонімна функція object.addEventListener("load", myScript); <img src="someimage.gif" onload="loadImage()" width="100" height="132"> <script> function loadImage() { alert("Image is loaded"); } </script>
  • 26. Спливання і перехоплення Якщо є кілька вкладених один в одного елементів, події можна призначати кожному з них. Тоді, по замовчуванню, порядок виконання – від внутрішніх до зовнішніх. Це звуть спливанням (bubbling). Приклад: <div onclick="alert('DIV')"> <p onclick="alert('P')"> <span> 1 </span> <span onclick="alert('SPAN')"> 2 </span> <span> 3 </span> </p> </div> Клік на 2 виводить SPAN, потім P, потім DIV.
  • 27. Порядок виконання можна змінити на протилежний, що називають перехопленням (capturing ). Це робиться третім (необов’язковим) параметром у addEventListener, який, по замовчуванню, дорівнює false. Отже, для перехоплення треба писати так: element.addEventListener("click", myFunction, true);
  • 28. Приклад: <div id=myDiv> <p id=myPar> <span> 1 </span><span id=mySpan> 2 </span><span> 3 </span> </p> </div> <script> myDiv.addEventListener("click", clickDiv, true); myPar.addEventListener("click", clickPar, true); mySpan.addEventListener("click", clickSpan, true); function clickDiv() { alert("You clicked the DIV element!"); } function clickPar() { alert("You clicked the P element!"); } function clickSpan() { alert("You clicked the SPAN element!"); } </script>
  • 29. Властивість target Властивість події target повертає елемент, на якому спрацювала подія. Приклад: <body onclick="myFunction(event)"> <p>Клікніть, і дізнаєтесь, на чому клікнули</p> <div><strong>Зауваження:</strong> target повертає елемент, на якому спрацювала подія, але не обов’язково елемент, якому призначений eventlistener.</div> <script> function myFunction(event) { alert(event.target.tagName); } </script> </body>