Події форми. Події форми Додаткова інформація про подію

07.09.2020 Новини

Минулої теми розглядалися події, що виникають при натисканні клавіш. У цьому темі ми розглянемо інші події форми. У тому числі надсилання форми на сервер.

Елемент у фокусі

Коли елемент форми виявляється у фокусі, виникає подія focus, а коли елемент виходить з фокусу, спрацьовує подію blur. Створимо поле для введення та виведемо в консоль текст при отриманні ним фокусу та при виході з фокусу:

HTML код:

Немає сенсу у використанні цих подій зміни стилю елемента. Для цього CSS існує псевдоклас focus.

Введення значення

Подія inputвиникає, коли користувач друкує текст у полі для введення. Воно спрацьовує при додаванні або видаленні кожного символу, а також при копіюванні тексту в полі для введення. У деяких браузерах воно працює незвичайно: при кожному введенні символу створюється подія blur, після цього виконується обробник події input, а потім створюється подія focus. Якщо обробників подій focus та blur немає, то в цьому немає проблеми. Але якщо вони є, вони спрацьовуватимуть при кожному додаванні символу.

Додамо на сторінку ще один тэг і виведемо його значення під час введення тексту:

HTML код:

JavaScript:

28
29
30
31
32

var newv = document.getElementById("new_value"); newv.onchange = function () ( console.log("Значення змінено на: "+newv.value); );

Відправлення форми

Подія submit спрацьовує при надсиланні форми на сервер. Воно використовується для перевірки даних, які користувач запровадив у форму. У обробнику перевіряються значення елементів форми, і якщо якісь значення введені неправильно, робиться скасування відправки форми. При цьому зазвичай виводиться повідомлення, в якому зазначається, що потрібно виправити.

Помістимо створені теги у форму та додамо кнопку відправки форми:

HTML код:

У попередніх прикладах елементи форми вже були знайдені, тому обробник повторний пошук не проводиться.

Якщо форма заповнена правильно, тобто у всіх полях є хоча б два символи, то браузер спробує запустити файл, вказаний в атрибуті action, і виникне помилка, тому що такого файлу немає. Але в цьому немає жодного ризику, тому не треба боятися перевіряти роботу скрипту. Якщо в одному з полів введено менше двох символів, з'явиться повідомлення та відправка буде скасована. Якщо перевірок досить багато, можна кожної перевірки виводити своє повідомлення і скасовувати відправку форми.

The input Event fires when the value of element is used to create interactive controls for web-based forms in order to accept data from the user; wide wireless of types of input data and control widgets are available, depending on device and user agent. "> , елемент представляє контроль, що забезпечує меню опцій"> ...

Приклад, у якому розглянемо, як з допомогою події change отримати значення обраного елемента input з type , рівним radio:

Windows Linux macOS ...

jQuery - Подія вибору (select)

Подія вибору 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; ));

Додавання подій до динамічно створених об'єктів

Для того, щоб повісити подію на елемент, якого ще немає, можна використовувати наступну конструкцію функції on:

$(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 розглянемо за допомогою такого прикладу:

...