JS властивість Event.relatedTarget (Focus)
Загальний опис
relatedTarget — це властивість об'єкта FocusEvent, яка містить посилання на елемент, з якого або на який переміщений фокус під час подій, пов'язаних із фокусуванням, таких як focusin, focusout, blur або focus. Для подій focusin і focus ця властивість вказує на елемент, з якого фокус перемістився, а для focusout і blur — на елемент, на який фокус перейшов.
Ця властивість особливо корисна при роботі з формами або складними інтерфейсами, коли важливо знати, звідки був втрачений або куди переміщений фокус. Наприклад, при створенні кастомних валідацій форм або динамічного перемикання елементів, знання попереднього елемента фокусування може допомогти в реалізації специфічної логіки поведінки.
Варто зазначити, що relatedTarget може бути null у випадках, коли фокус переміщений на інший елемент або за межі документа, наприклад, коли користувач натискає іншу вкладку браузера. Це важливо враховувати, щоб уникнути помилок при обробці фокусу.
Приклад використання:
inputElement.addEventListener('focusout', function(event) {
if (event.relatedTarget) {
console.log("Фокус перемістився на елемент: ", event.relatedTarget);
} else {
console.log("Фокус втрачений.");
}
});
У цьому прикладі подія focusout відстежує, куди перемістився фокус, коли користувач залишив поле введення. Якщо фокус перейшов на інший елемент, це відображається в консолі, інакше відзначається, що фокус був втрачений.
- Порада
-
Зручно використовувати
автор: BondrelatedTargetдля створення більш динамічних інтерфейсів, наприклад, при зміні стану елемента або відображенні контекстних повідомлень, коли фокус переміщується між різними елементами інтерфейсу. Це дозволяє створювати більш чуйні інтерфейси. - Порада
-
Щоб уникнути повторної обробки подій, можна порівняти попередній елемент фокусування з поточним за допомогою
автор: BondrelatedTarget. Це може бути корисно, наприклад, у випадках, коли потрібно уникнути зайвих перезавантажень компонентів або повторного запуску анімацій. - Порада
-
Для випадаючих меню або діалогових вікон можна використовувати
автор: BondrelatedTarget, щоб перевірити, чи фокус перемістився на елемент всередині контейнера або зовні його. Це дозволяє точніше контролювати закриття меню або діалогів.
Синтаксис
event.relatedTarget
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 26 | 24 | 7 | 15 | 12 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 26 | 24 | 7 |
| Переглядач | ||
|---|---|---|
| - | - |
Приклади
+ запропонувати свій приклад у пісочниці
Цей приклад показує, як закрити діалогове вікно, якщо фокус перемістився за межі його вмісту. Використання relatedTarget дозволяє точно визначити, чи фокус вийшов за межі діалогового елемента, що допомагає контролювати його видимість.
HTML
<div id="dialog">Демонстраційний елемент</div>
<button id="closeButton">Закрити</button>
JS
const dialog = document.getElementById('dialog');
const closeButton = document.getElementById('closeButton');
dialog.addEventListener('focusout', function(event) {
if (!dialog.contains(event.relatedTarget)) {
dialog.style.display = 'none';
console.log("Діалогове вікно закрите через втрату фокусу.");
}
});
У цьому прикладі, коли користувач виходить з першого поля вводу, відстежується, чи фокус перемістився на друге поле. Це може бути корисним для кастомних перевірок або валідацій при переміщенні між полями форми.
HTML
<div id="input1">Демонстраційний елемент</div>
<div id="input2">Демонстраційний елемент</div>
JS
const input1 = document.getElementById('input1');
const input2 = document.getElementById('input2');
input1.addEventListener('focusout', function(event) {
if (event.relatedTarget === input2) {
console.log("Фокус перемістився з першого поля на друге.");
} else {
console.log("Фокус залишив перше поле.");
}
});
У цьому прикладі користувач може переміщувати фокус між двома полями та кнопкою. При кожній зміні фокусу виводиться інформація про те, з якого елемента фокус перейшов на інший, використовуючи властивість FocusEvent -> relatedTarget. Це допомагає показати, як можна відслідковувати переміщення фокусу та застосовувати цю інформацію у взаємодії з формами або іншими елементами сторінки.
Коментарі
Коментарів ще немає — будьте першим!