The inputеvent fires when the value of element is used для створення interactive controls for web-based forms in order to accept data from the user; На основі різних типів введених даних і керування widgets є доступні, залежно від вашого пристрою і користувача. "> , елемент керує тим, що дає змогу menu options">
Bubbles | Yes |
---|---|
Cancelable | No |
Interface | InputEvent |
Event handler property | GlobalEventHandlers.oninput |
HTML
JavaScript
const input = document.querySelector("input"); const log = document.getElementById("values"); input.addEventListener("input", updateValue); function updateValue(e) ( log.textContent = e.target.value; )Result
Specifications
Specification | Status |
---|---|
HTML Living Standard |
Living Standard |
Document Object Model (DOM) Level 3 Events Specification Definition of "input event" in that specification. |
Obsolete |
Browser compatibility
Компактність таблиці в цій сторінці генерується з структурованих даних. Якщо ви знайдете, щоб дізнатися про ваші дані, клацніть на https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome для Android | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | |
input event | Chrome Full support Yes | Edge Full support 79 Full support 79 No support 12 - 79 Notes Notes Не supported on select , checkbox , або radio inputs. | Firefox Full support Yes | IE Partial support 9 |
У цій статті розглянемо методи, які бібліотека jQuery надає веб-розробнику для обробки подій.
Для роботи з подіями у сценаріях JavaScript браузер надає API (наприклад, функцію addEventListener). Використовуючи цю функцію, ви можете вказати код, який необхідно виконати, коли браузер для зазначеного елемента генеруватиме подію.
Обробка подій за допомогою методів jQuery
Синтаксис функції onПеред тим, як переходити до додавання елементів обробників подій, ці елементи потрібно спочатку отримати. Дізнатися про те, як знайти потрібні елементи на сторінці можна у статті jQuery - Вибір елементів.
У jQuery повісити подію (слухач подій) на певний елемент можна за допомогою функцій on і one, а також коротких записів on.
// функція on.on (events, handler); // функція one.one(events,handler); // events - подія чи список подій через пробіл, у разі настання яких необхідно виконати обробник (handler) // handler - функція (обробник події) // короткий запис функції on .event(handler); // event - назва події (можна використовувати для обробки лише тих подій, для яких у jQuery створено такий короткий запис)
Функція one відрізняється від on лише тим, що вона виконує обробник при настанні вказаної події лише один раз.
Наприклад, додамо за допомогою функції on подію click для всіх елементів із класом btn:
// використання як обробника анонімної функції $(".btn").on("click", function() ( // дії, які будуть виконані при настанні події... console.log($(this).text() ));)); // використання звичайної функції як обробник var myFunction = function() ( console.log($(this).text()); ) $(".btn").on("click", myFunction);
Наведений вище код, записаний з використанням короткого запису функції on:
$(".btn").click(function() ( // дії, які будуть виконані при настанні події... console.log($(this).text()); ));
Додаткова інформація про подію
При обробці події ви можете дізнатися деяку додаткову інформаціюпро нього. Передача цієї інформації, саме об'єкта Event в обробник події здійснюється завжди у вигляді першого аргументу.
$("#demo").on("click", function(e)( // e – об'єкт Event, що містить додаткову інформацію про подію // часто використовуються властивості об'єкта Event e.preventDefault(); //скасувати виконання дії за замовчуванням e.stopPropagation(); // зупинити подальше спливання події // e.type – отримати тип події // e.target – посилання на елемент, на якому сталася подія // e.currentTarget – посилання на поточний елемент (для якого спрацював обробник).Ця властивість, як правило, дорівнює функції this. e.pageY – координати курсору щодо лівого верхнього кутадокумента));
Простір імен
У jQuery після вказівки імені події ви можете додатково вказати простір імен.
Наприклад:
// подія click у просторі імен first $("#demo").on("click.first",function()( console.log("1 обробник події click"); )); // подія click у просторі імен second $("#demo").on("click.second",function()( console.log("2 обробник події click"); ));
Простір імен – це дуже зручна річ. Вона використовується, наприклад, коли вам необхідно викликати не всі події, а лише з певним ім'ям.
// викликати подію click у просторі імен first $("#demo").trigger("click.first"); // викликати подію click у просторі імен second $("#demo").trigger("click.second");
Також за його допомогою дуже просто видаляти певні події:
//видалити обробники події click у просторі імен first $("#demo").off("click.first"); //видалити обробники події click у просторі імен second $("#demo").off("click.second");
Опис та приклади використання функцій trigger та off розглядаються у статті трохи нижче.
Передача додаткових даних в обробник
При необхідності ви можете передати дані в обробник події (за допомогою додаткового аргументу у функції on). Доступ до переданих даних усередині обробника здійснюється через об'єкт Event.
Здійснюється це так (приклад):
...
Як повісити кілька подій на один елемент
Приклад використання одного обробника для кількох (2 або більше) подій:
$("#id").on("keyup keypress blur change", function(e) ( console.log(e.type); // тип події )); // або так var myFunction = function() ( ... ) $("#id") .keyup(myFunction) .keypress(myFunction) .blur(myFunction) .change(myFunction);
Для кожної події своя функція:
$("#id").on(( mouseenter: function() ( // обробник події mouseenter... ), mouseleave: function() ( // обробник події mouseleave... ), click: function() ( / / обробник події click...)));
Приклад використання в jQuery кілька обробників (функцій) на одну подію:
$("#demo").click(function()( console.log("1 обробник події click"); )); $("#demo").click(function()( console.log("2 обробник події click"); ));
Наприклад, дізнатися в якій черзі виконуватимуться події можна так:
Var eventList = $._data($("#demo"), "events"); console.log(eventList);
Програмний виклик події
Для виклику події з коду jQuery є 2 методи:
- trigger - викликає зазначену подію елемента.
- triggerHandler - викликає обробник події, причому сама подія не відбувається.
jQuery - Подія завантаження сторінки (ready)
Процес додавання до певного елемента обробника події зазвичай здійснюється після завантаження сторінки, тобто. коли DOM дерево документа вже збудовано. Інакше при написанні обробників ви можете звернутися до елементів, яких ще немає на сторінці.
Найкоротший запис події завантаження сторінки в jQuery виглядає так:
$(function()( // дії, які необхідно виконати після завантаження документа...));
Але, можна використовувати і довшу запис:
$(document).ready(function()( // дії, які необхідно виконати після завантаження документа...));
jQuery - Подія завантаження (load)
Подія load браузер генерує елемент, коли він і всі вкладені в нього елементи були повністю завантажені. Ця подія призначена лише для елементів, в яких присутні URL: image, script, iframe та window.
Наприклад, виконати функцію, коли сторінка буде повністю завантажена (включаючи зображення):
$(window).on("load", function() ( // дії після повного завантаження сторінки...));
Наприклад, виведемо повідомлення в консоль, коли вказане зображення буде завантажено:
...
jQuery - Події миші
У jQuery для відстеження дій миші найчастіше використовують такі події:
- mousedown
- mouseup
- click
- mousemove
- wheel
- hover
- mouseenter
- mouseover
- mouseleave
- mouseout
jQuery - Подія клік (click)
Подія click є складною подією, вона виникає після генерування подій mousedown і mouseup . Подія mousedown виникає, коли вказівник знаходиться над елементом і кнопка миші натиснута. Подія mouseup відбувається, коли вказівник знаходиться над елементом, а кнопка миші відпущена. Подія click генерується, коли курсор знаходиться над елементом, а клавіша миші натиснута і відпущена. Ці події можуть отримати будь-які HTML елементи.
Наприклад, повісимо обробник на подію на click елемента window . При настанні цієї події обробник виводитиме номер натиснутої клавіші та координати курсору:
$(window).on("click", function(e) ( // обробка події click... console.log("Натиснута кнопка: " + e.which); //1 - ліва кнопка, 2 - середня кнопка, 3 - права console.log("Координати курсору: x =" + e.pageX + "; y = "+ e.pageY); ));
Наприклад, повісимо подію onclick на всі елементи з класом btn:
$(".btn").on("click", function()( // код обробника події натискання кнопки... )); Короткий запис події на кліку: $(".btn").click(function()( ... ));
Наприклад, розберемо, як можна приховати блок через деякий час після події.
...
jQuery - Подія при наведенні (hover)
jQuery - Що являє собою подію
Подія при піднесенні курсору є складною і складається з 2 подій:
- входження (mouseenter, mouseover);
- покидання (mouseleave, mouseout).
Події mouseenter і mouseleave в jQuery відрізняються від mouseover і mouseout тільки тим, що вони не виникають коли курсор відповідно входить і залишає внутрішні елементи елемента, що прослуховується. Тобто події mouseover і mouseout спливають, а mouseenter і mouseleave - ні.
Наприклад, змінимо колір елемента списку під час піднесення курсору до нього:
- Ручка
- Олівець
- Лінійка
Ті ж самі дії, але використанням mouseover і mouseout:
$("ul>li"). mouseover(function()( // при вході в елемент $(this).css("color","orange"); )). mouseout(function()( // при залишенні елемента $(this).css("color","black"); ));
Дані методи необов'язково використовувати разом, їх можна також застосовувати окремо.
Наприклад, підрахуємо кількість відвідувань елемента при настанні події "Навести мишею":
Замість використання mouseenter і mouseleave можна використовувати подію hover.
Наприклад, перепишемо наведений вище приклад, використовуючи hover:
$("ul>li").hover(function()( // при вході в елемент $(this).css("color","orange"); ), function()( // при залишенні елемента $( this).css("color","black"); ));
При використанні події hover в jQuery, перший обробник використовується для завдання дій при вході курсору в елемент (mouseenter), а другий - при залишанні (mouseleave).
Якщо вказати події hover один обробник, він буде виконуватися як обробки наведення миші, так її залишення.
Наприклад:
$("h1").hover(function()( console.log("Сталося події входу в елемент або виходу з нього"); ));
jQuery - Подія руху миші
Подія mousemove посилається елементу, коли вказівник миші переміщується всередині нього. Будь-який HTML елемент може отримувати цю подію.
$(".target").mousemove(function(e) ( console.log("Викликаний обробник для події mousemove."); console.log("Координати щодо лівого верхнього кута документа: " + e.pageX + ", " + e.pageY); console.log("Координати курсору всередині мети: " + e.offsetX + ", " + e.offsetY); ));
jQuery - Подія коліщатка миші (wheel)
Прослуховування події прокручування коліщатка (wheel) мишки можна здійснити так:
$(window).on("wheel", function(e) ( // код обробника (наприклад)... console.log("Кількість прокручених пікселів: " + e.originalEvent.deltaY); if (e.originalEvent). deltaY< 0){ console.log("Прокручиваем вверх"); } else { console.log("Прокручиваем вниз"); } });
Ця подія на відміну від scroll генерується браузером тільки для коліщатка мишки, при цьому неважливо прокручується елемент чи ні, тобто. з ним можна працювати на елементах з overflow, рівним hidden. Ще одна відмінність полягає в тому, що wheel генерується до прокручування, а scroll - після неї.
jQuery – Події клавіатури
При натисканні клавіатури браузер генерує події в наступному порядку:
Keydown -> keypress -> keyup
- keydown (клавіша натиснута, але ще не відпущена);
- keypress (подія генерується для літер, цифр та інших клавіш, за винятком керуючих) – призначено для того, щоб отримати код символу (події keydown і keyup дозволяють дізнатися тільки про код клавіші, але не символ);
- keyup (генерується браузером під час відпускання клавіші).
Наприклад, напишемо обробник для прослуховування всіх подій, які відбуваються при натисканні клавіші:
...
Приклад, в якому показано, як можна прослухати подію keypress і дізнатися, чи натиснуто вказане поєднання клавіш:
$(document).keypress("c", function(e) ( if(e.ctrlKey) ( console.log("Натиснуте сполучення клавіш Ctrl+c"); ) ));
Приклад, як можна прослухати клавіші Ctrl+Enter:
$(document).keydown(function(e) ( // за допомогою macOS X if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10))) ( / / ваші дії... ) )
Приклад, з використанням подій keydown та keyup:
...
jQuery – Події елементів форми
У jQuery можна виділити такі події для елементів форми і не тільки:
- focus (focusin)
- blur (фокус)
- change
- input (для текстових елементів форми)
- select
- submit
jQuery - Події отримання та втрати фокусу
Подія focus надсилається елементу, коли він отримує фокус. Ця подія генерується для елементів input , select і посилань (a href="..."), а також будь-яких інших елементів, які мають властивість tabindex . Отримання елементом фокусування зазвичай здійснюється за допомогою кліка або натискання клавіші Tab на клавіатурі. Подія focus не спливає.
Крім focus є ще подібна подія, називається вона focusin. На відміну від focus, ця подія спливає, і вона може, наприклад, використовуватися для виявлення події фокусу батьківськими елементами.
Подія blur надсилається елементу, коли він втрачає фокус. Так само як і focus, подія blur має схожу подію focusout. Ця подія відрізняється від blur тим, що вона може спливати. Це можна використовувати, наприклад, щоб одержати його на батьківських елементах, а не тільки на тому елементі, який його викликав (target).
Наприклад, при отриманні елементом div події фокусу встановимо йому тло оранжевого кольору:
...
Таке саме виконати з допомогою подій focus і blur не вдасться, т.к. вони не спливають:
$("#demo input"). focus(function()( $(this).parent().css("background-color","orange"); )) .blur(function()( $(this).parent().css("background -color","inherit"); ));
jQuery - Подія зміни (change)
Подія change призначена для реєстрації зміни значення елементів input, textarea і select. Для елементів select , checkboxes , і radio кнопок ця подія виникає відразу (тобто як тільки користувач робить вибір). Але для інших елементів ця подія не відбуватиметься доти, доки цей елемент не втратить фокус.
Приклад використання події change для стеження стану елемента checkbox . Доступність кнопки визначатиме залежно від того в якому стані (checked чи ні) знаходитись прапорець:
...
Приклад, у якому розглянемо, як отримати значення елемента select при його зміні:
...
Приклад, у якому розглянемо, як отримати всі вибрані елементи select при його зміні:
...
Приклад програмного виклику події change для select:
// list - ID елемента change $("#list").trigger("change"); // Короткий запис $("#list").change(); // виклик тільки обробника події change $("#list"). triggerHandler("change");
Приклад використання події зміни зміни для отримання значення елемента input:
...
Але крім події change є ще подія input для текстових елементів. Ця подія, на відміну від change, генерується відразу, а не після того, як цей елемент втратить фокус.
Приклад використання події введення для отримання значення елемента input:
$("input").on("input",function()( var value = $(this).val(); console.log(value); ));
Приклад, в якому представлений один із способів отримання значення елемента:
...
Приклад, у якому розглянемо, як з допомогою події change отримати значення вибраного елемента input з type , рівним radio:
Windows Linux macOS ...
jQuery - Подія вибору
Подія вибору select генерується браузером, коли користувач усередині елементів input з type="text" або textarea виділяє текст.
$("#target").select(function() ( console.log("Викликаний обробник події select"); ));
jQuery – Подія відправлення форми (submit)
Подія submit виникає у елемента, коли користувач намагається надіслати форму. Ця подія може бути додана лише до елементів form .
Приклад використання події submit:
...
Програмний виклик надсилання форми:
$("#feedback").submit(); $("#feedback").trigger("submit");
jQuery - Подія прокручування (scroll)
Для відстеження стану скролінгу в jQuery використовується подія scroll.
Наприклад, повісимо на подію прокручування сторінки функцію, яка буде відображати елемент з класом scrollup , якщо величина прокручування більше 200px і приховувати його, якщо значення прокручування менше цієї величини.
// короткий запис функції $(window).scroll(function() ( // дії при скролінг сторінки... if ($(this).scrollTop()>200) ( $(".scrollup").fadeIn() ; ) else ( $(".scrollup").fadeOut(); ) ));
jQuery - Подія зміни розмірів вікна (resize)
Для прослуховування події зміни вікна браузера використовують resize:
Наприклад, створимо обробник, який буде при зміні вікна браузера виводити на кінець сторінки її ширину та висоту:
$(window).resize(function() ( $("body").append("
Ширина x Висота = "+window.innerWidth+"x"+window.innerHeight+"
"); });jQuery - Скасування стандартної поведінки події
Деякі елементи HTML мають стандартну поведінку. Наприклад, коли користувач натискає посилання, він переходить за адресою вказаною в атрибуті href . Якщо вам ця дія не потрібна, то її можна скасувати. Для скасування стандартної поведінки необхідно викликати в обробнику цієї події метод preventDefault об'єкта event.
Наприклад, скасуємо стандартну поведінку всіх посилань на сторінці, що мають клас service:
$("a.service").on("click",function(e)( //скасовуємо стандартну дію браузера e.preventDefault(); // дії, які виконуватиме посилання... ));
Що таке спливання і як його зупинити
Окрім скасування стандартної дії, у механізмі подій є ще таке поняття як спливання. Воно полягає в тому, що коли браузер генерує подію, то він це робить не тільки для поточного елемента (мети), але і для всіх його нащадків, включаючи батька:
Поточний елемент (мета) -> батьківський елемент мети -> прабатьківський елемент -> ... -> document -> window
У jQuery бувають сценарії, коли у представленому ланцюжку у якогось елемента те ж є обробник для цієї події, яку виконувати не потрібно. І щоб ця подія не поширилася на цей елемент, її необхідно зупинити. Для цього в обробнику потрібного елемента необхідно викликати метод stopPropagation об'єкта event. Після виклику цього методу подія зупиниться і не спливатиме.
Наприклад, щоб піднести курсор до елемента з класом mark , його вміст ставав помаранчевим кольором.
В даному випадку якщо не вказувати метод stopPropagation, то при піднесенні курсору до елемента span з класом mark ця подія виникне не тільки у нього, але й у всіх його батьківських елементів. А це в цьому прикладі призведе до того, що зміниться колір як тексту, укладеного в span , а й усього абзацу.
Якщо вам необхідно скасувати стандартну поведінку браузера і зупинити спливання події, то в jQuery замість виклику двох цих методів можна просто повернути як результат функції значення false .
$("a").on("click", function(e)( //e.preventDefault(); //e.stopPropagation(); ... return false; ));
Додавання подій до динамічно створених об'єктів
Для того, щоб повісити подію на елемент, якого ще немає, можна використовувати наступну конструкцію функції:
$(document).on(eventName, selector, handler); // document або будь-який інший існуючий батьківський елемент // eventName – ім'я події // selector – селектор, що здійснює фільтрацію нащадків, для яких необхідно запустити обробник події // handler – обробник події
Це можна здійснити завдяки тому, що подія спливає, і, отже, виникає в усіх предків цього елемента. А об'єкт, до якого спливають події на сторінці, є document . Тому здебільшого вибирають саме його. Після цього знаючи селектор, функція on може програмно відібрати серед елементів (елемента, який викликав цю подію (target) та всіх його предків, включаючи батька) ті, які відповідають йому. І потім для всіх відібраних елементів виконати вказаний у функції on обробник. Події, за допомогою яких обробка події переноситься на інший елемент (предок), називається в jQuery ще процесом делегування події.
Наприклад, додамо подію до елемента, якого ще немає на сторінці:
Делегування може застосовуватися не тільки для обробки подій динамічно створених об'єктів, але і для того, щоб не прив'язувати до кожного елемента (якщо їх на сторінці може бути багато) обробник.
Наприклад, заборонимо в коментарях переходити за зовнішніми посиланнями (такі дії перенаправлятимемо на сторінку away):
$(document).on("click","#comment a",function(e) ( if(!(location.hostname === this.hostname || !this.hostname.length))) ( e.preventDefault( );location.href="away?link="+encodeURIComponent($(this).attr("href")); ) ));
jQuery - Видалити обробник події
Видалення обробників події здійснюється за допомогою методу off. При цьому за допомогою нього можна видалити ті обробники, які додані за допомогою методу on .
Виклик методу off без аргументів зніме у зазначених елементів усі додані до них обробники подій.
Наприклад, відключимо всі обробники у елементів із класом link:
$(".link").off();
Наприклад, видалимо подію click у всіх елементів із класом link:
$(".link").off("link");
Спеціальний селектор (**) дозволяє видалити лише делеговані події із збереженням не делегованих:
$(".link").off("click","**");
Видалити лише зазначені делеговані події (за допомогою селектора):
// додавання делегованої події $("ul").on("click","li", function()( // виводимо в консоль контент елемента li console.log($(this).text()); )) ; // Видалення делегованої події $("ul").off("click","li");
Видалити всі обробники openModal делегованої події click у просторі імен modal для елементів з класом show:
$("body").on("click.modal", ".show", openModal);
Створення події користувача
Для створення подій користувача в jQuery використовуються методи on і trigger .
Принцип створення спеціальної події jQuery розглянемо за допомогою такого прикладу:
Минулої теми розглядалися події, що виникають при натисканні клавіш. У цьому темі ми розглянемо інші події форми. У тому числі надсилання форми на сервер.
Елемент у фокусі
Коли елемент форми виявляється у фокусі, виникає подія focus, а коли елемент виходить з фокусу, спрацьовує подію blur. Створимо поле для введення та виведемо в консоль текст при отриманні ним фокусу та при виході з фокусу:
HTML код:
Немає сенсу використання цих подій для зміни стилю елемента. Для цього в CSS існує псевдоклас focus.
Введення значення
Подія inputвиникає, коли користувач друкує текст у полі для введення. Воно спрацьовує під час додавання або видалення кожного символу, а також копіювання тексту в поле для введення. У деяких браузерах воно працює незвичайно: при кожному введенні символу створюється подія blur, після цього виконується обробник події input, а потім створюється подія focus. Якщо обробників подій focus та blur немає, то в цьому немає проблеми. Але якщо вони є, вони будуть спрацьовувати при кожному додаванні символу.
Додамо на сторінку ще один тэг і виведемо його значення під час введення тексту:
HTML код:
JavaScript:
28 |
var newv = document.getElementById("new_value"); newv.onchange = function () ( console.log("Значення змінено на: "+newv.value); ); |
Надсилання форми
Подія submit спрацьовує при надсиланні форми на сервер. Воно використовується для перевірки даних, які користувач увійшов у форму. В обробнику перевіряються значення елементів форми, і якщо якісь значення введені неправильно, робиться скасування відправки форми. При цьому зазвичай виводиться повідомлення, в якому зазначається, що потрібно виправити.
Помістимо створені теги у форму та додамо кнопку відправлення форми:
HTML код:
У попередніх прикладах елементи форми вже були знайдені, тому обробник повторний пошук не проводиться.
Якщо форма заповнена правильно, тобто у всіх полях є хоча б два символи, то браузер спробує запустити файл, вказаний в атрибуті action, і виникне помилка, тому що такого файлу немає. Але в цьому немає жодного ризику, тому не треба боятися перевіряти роботу скрипта. Якщо в одному з полів введено менше двох символів, з'явиться повідомлення та відправка буде скасована. Якщо перевірок досить багато, то можна для кожної перевірки виводити своє повідомлення та скасовувати надсилання форми.
Віруси