event.target — елемент, на якому виникла подія в JavaScript


Загальний опис

target — це властивість об'єкта Event, яка повертає посилання на елемент, що викликав подію. Це може бути будь-який HTML-елемент, на якому сталася подія, наприклад, натискання кнопки або введення тексту в поле форми.

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

Властивість target працює зі всіма стандартними подіями JavaScript, такими як click, input, keydown, focus, та інші. Важливо розуміти, що ця властивість повертає саме елемент, на якому була викликана подія, а не той елемент, до якого була прив'язана подія (це різниця між target і currentTarget).

Приклад використання:

document.addEventListener('click', function(event) {
  console.log(event.target);  // Виведе в консоль елемент, на якому стався клік
});

У цьому прикладі обробник подій для події click спрацьовує на всьому документі. Однак за допомогою event.target ми можемо точно визначити, на якому саме елементі було натиснуто.

Коли подія відбувається на вкладеному елементі, наприклад, при натисканні на текст всередині кнопки, event.target поверне цей внутрішній елемент (текстовий елемент), а не саму кнопку. Для цього використовують різні техніки для перевірки чи зміни target залежно від задачі.

автор: Bond

Порада

Для динамічно створених елементів (елементів, доданих у DOM після завантаження сторінки), обробка подій через target працює однаково, що дозволяє ефективно керувати новими елементами. Не треба змінювати код для прив'язки подій, що робить цей інструмент універсальним для будь-яких оновлень на сторінці.

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

Завжди варто перевіряти тип або властивості елемента, отриманого через event.target. Це допомагає уникнути помилок при роботі з різними типами елементів. Наприклад, якщо подія сталася на зображенні або на посиланні, методи доступу до цих елементів можуть відрізнятися.

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

event.target може змінюватися при використанні технологій, які маніпулюють DOM, таких як shadow DOM. Якщо ви використовуєте подібні технології, треба враховувати цю специфіку, щоб уникнути неправильного поводження з елементами.

автор: Bond

Синтаксис

event.target

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 7 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
14.5.0 1.0

Приклади

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

У цьому випадку ми використовуємо event.target разом із closest() для того, щоб визначити найближчий елемент списку (li), навіть якщо клік був на вкладеному елементі всередині li. Це корисно, коли нам потрібно працювати з батьківськими елементами, незалежно від того, куди саме користувач натиснув.

HTML

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

JS

document.querySelector('.list').addEventListener('click', function(event) {
  const clickedItem = event.target.closest('li');
  if (clickedItem) {
    console.log(`Вибрано елемент списку: ${clickedItem.textContent}`);
  }
});
автор: Bond

Цей приклад демонструє роботу з подіями на різних елементах (кнопках, текстовому полі, чекбоксі) та відстеження подій за допомогою event.target. Користувач бачить повідомлення, коли натискає кнопки, вводить текст або змінює стан чекбоксу, що дозволяє чітко показати взаємодію з DOM.

HTML

<header>
  <h2 class="title">Event -> target</h2>
  <p class="description">Дозволяє визначити, на якому елементі сталася подія.</p>
</header>
<main>
  <div class="result">
    <button class="action-btn" type="button">Натисни на мене</button>
    <button class="action-btn" type="button">Або на мене</button>

    <input class="text-input" type="text" placeholder="Введи текст тут" />
    
    <label>
      <input type="checkbox" class="toggle-checkbox" />
      Перемкни мене
    </label>
    
    <p class="log">Подія ще не відбулася</p>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

button.action-btn {
  display: inline-block;
  margin-right: 10px;
  padding: 10px 15px;
  background-color: #007bff;
  color: white;
  border: none;
  cursor: pointer;
}

button.action-btn:hover {
  background-color: #0056b3;
}

input.text-input {
  display: block;
  margin: 15px 0;
  padding: 10px;
  border: 1px solid #ccc;
  width: 100%;
}

.toggle-checkbox {
  margin-right: 5px;
}

p.log {
  margin-top: 15px;
  color: #333;
  font-style: italic;
}

JS

document.querySelector('.result').addEventListener('click', function (event) {
  const logElement = document.querySelector('.log');

  if (event.target.classList.contains('action-btn')) {
    logElement.textContent = `Ви натиснули кнопку: ${event.target.textContent}`;
  }

  if (event.target.classList.contains('toggle-checkbox')) {
    logElement.textContent = event.target.checked ? 'Чекбокс увімкнено' : 'Чекбокс вимкнено';
  }
});

document.querySelector('.text-input').addEventListener('input', function (event) {
  const logElement = document.querySelector('.log');
  logElement.textContent = `Ви ввели: ${event.target.value}`;
});
//# sourceURL=pen.js
автор: Bond

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

HTML

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

JS

document.querySelector('.container').addEventListener('click', function(event) {
  if (event.target.tagName === 'BUTTON') {
    console.log(`Натиснута кнопка з текстом: ${event.target.textContent}`);
  }
});
автор: Bond

Коментарі

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

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

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

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

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