JS об'єкт FocusEvent


Опис

FocusEvent включає події, що відстежують, коли елемент отримує або втрачає фокус, і зазвичай використовуються для формових елементів, таких як input, textarea, button. Основними подіями є focus, яка спрацьовує, коли елемент отримує фокус, та blur, що активується при втраті фокусу. Це дозволяє реагувати на введення даних або зміну фокусу в інтерфейсі користувача, надаючи зручність при роботі з формами.

Подія focus спрацьовує на початку взаємодії з елементом, і її часто використовують для зміни стилів, перевірки значень або відображення підказок. Наприклад, можна змінювати кольорову рамку поля при фокусі, що вказує користувачеві, де він зараз знаходиться.

inputElement.addEventListener('focus', (event) => {
  event.target.style.borderColor = 'blue';
});

blur дозволяє обробляти ситуації, коли користувач покидає елемент, наприклад, для перевірки введеного значення або зняття виділення. Завдяки цій події можна запускати валідацію даних, яку слід робити після введення, але не під час. У випадку помилки можна, наприклад, додати червону рамку або повідомлення для користувача.

inputElement.addEventListener('blur', (event) => {
  if (!event.target.value) {
    event.target.style.borderColor = 'red';
  }
});

Існують також події focusin та focusout, які є делегованими версіями focus і blur. Вони спрацьовують навіть якщо фокус переходить на дочірній елемент, що дозволяє їх використовувати для обробки подій на батьківських елементах.

formElement.addEventListener('focusin', (event) => {
  event.target.style.backgroundColor = 'lightyellow';
});

focusin і focusout зручні для роботи зі складними формами, де потрібно відстежувати фокус на всіх вкладених полях, не вказуючи кожне з них окремо. На відміну від focus та blur, які не можуть "бульбашитися" догори, focusin і focusout піднімаються від дочірніх елементів до батьківських. Це важлива відмінність, яка робить їх особливо корисними для відстеження фокусу на великих формах чи списках елементів.

автор: Bond

Порада

Щоб виділити активний елемент при фокусі, рекомендується використовувати класи замість прямих стилів в обробнику focus. Це дозволяє додавати стилі лише за допомогою CSS і підтримувати читабельність коду, додаючи та видаляючи класи.

автор: Bond
Порада

Пам'ятайте, що подія blur не спрацьовує на прихованих елементах, таких як ті, що мають display: none. Якщо ви працюєте з елементами, які можуть динамічно приховуватися, переконайтеся, що важливі події для них обробляються іншим способом.

автор: Bond
Порада

Використовуйте preventDefault() обережно в обробнику події focus, оскільки це може призвести до неможливості отримання фокусу для елемента. Це може бути корисно тільки для спеціальних елементів, де фокус потрібен для інших подій, наприклад, при виклику модальних вікон.

автор: Bond

Синтаксис

element.addEventListener('focus', (event) => {
  // код, що виконується при отриманні фокусу
});

element.addEventListener('blur', (event) => {
  // код, що виконується при втраті фокусу
});

властивості

Властивість Опис
relatedTarget Властивість події, яка повертає посилання на пов'язаний елемент під час переходу фокусу, тобто елемент, з якого або на який перемістився фокус.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
26 24 7 15 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 26 24 7

Приклади

+ запропонувати свій приклад у пісочниці

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

HTML

<div class="form-field">перший елемент form-field</div>
<div class="form-field">другий елемент form-field</div>

JS

const formFields = document.querySelectorAll('.form-field');

formFields.forEach(field => {
  field.addEventListener('blur', (event) => {
    if (event.target.value === '') {
      event.target.style.borderColor = 'red';
      alert('Поле не може бути порожнім!');
    } else {
      event.target.style.borderColor = 'green';
    }
  });
});
автор: Bond

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

HTML

<form id="my-form">
    <label>Ім'я: <input type="text" name="name" value="Лесь"></label>
    <button type="submit">Надіслати</button>
</form>

JS

const form = document.getElementById('my-form');

form.addEventListener('focusin', (event) => {
  if (event.target.classList.contains('form-field')) {
    event.target.style.backgroundColor = 'lightyellow';
  }
});

form.addEventListener('focusout', (event) => {
  if (event.target.classList.contains('form-field')) {
    event.target.style.backgroundColor = '';
  }
});
автор: Bond

У цьому прикладі JavaScript реагує на focus і blur події, щоб динамічно підсвічувати поля та перевіряти, чи вони заповнені, коли фокус втрачається. При натисканні на кнопку "Скинути" всі поля очищуються та повертаються до початкового вигляду, що дозволяє зручно повторно використовувати форму.

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід