
В JavaScript слово target чаще всего связано с системой событий и указывает на конкретный DOM-элемент, на котором произошло действие пользователя. При клике, вводе текста или отправке формы браузер формирует объект события, внутри которого event.target содержит ссылку на исходный элемент. Это позволяет точно определить, какой узел инициировал событие, без жёсткой привязки обработчиков к каждому элементу.
Понимание работы event.target особенно важно при создании интерфейсов с большим количеством однотипных элементов: списков, таблиц, меню, динамически добавляемых блоков. Вместо десятков обработчиков используется один общий, а нужный элемент определяется через target. Такой подход уменьшает объём кода и упрощает поддержку логики взаимодействия.
На практике target применяется для чтения атрибутов (data-*), сравнения тегов, поиска родительских узлов и фильтрации событий. При работе с формами через target можно получить доступ к конкретному полю ввода, кнопке или чекбоксу, даже если обработчик назначен на контейнер.
Важно учитывать различие между event.target и event.currentTarget. Первый указывает на элемент, где произошло событие, второй – на элемент, на котором зарегистрирован обработчик. Непонимание этой разницы часто приводит к ошибкам в логике кликов и неверной обработке вложенных элементов.
В статье разобраны прикладные сценарии использования target в JavaScript: от обработки кликов и делегирования событий до типичных ошибок и примеров кода, которые можно сразу применять в реальных проектах.
Что означает target в JavaScript и где он применяется

Target всегда указывает на самый вложенный элемент, с которым произошло действие. Если пользователь нажал на span внутри кнопки, именно span будет находиться в event.target, а не сама кнопка. Это поведение напрямую связано с моделью всплытия событий.
Основные сценарии применения target:
- определение элемента, по которому был выполнен клик, без привязки обработчика к каждому узлу;
- чтение пользовательских атрибутов через dataset для передачи идентификаторов и параметров;
- фильтрация событий по тегу, классу или атрибуту;
- поиск родительских элементов с помощью closest();
- обработка динамически добавленных элементов без повторного назначения слушателей.
Target широко используется при делегировании событий. Обработчик назначается на общий контейнер, а логика внутри строится на анализе event.target. Это позволяет корректно работать со списками, таблицами, меню и интерфейсами, которые изменяются после загрузки страницы.
Пример практического применения – обработка кликов по элементам списка:
- Слушатель события назначается на ul.
- Внутри обработчика проверяется event.target.tagName или наличие нужного класса.
- Из event.target.dataset извлекается идентификатор элемента.
Target также применяется при работе с формами. Через него можно получить конкретное поле ввода, кнопку отправки или переключатель, даже если обработчик установлен на форму целиком. Это упрощает валидацию, сбор данных и реакцию на действия пользователя.
Использование event.target требует учёта вложенности элементов и структуры разметки. При сложной иерархии рекомендуется сразу проверять тип узла и при необходимости подниматься к нужному родителю, чтобы избежать срабатывания логики на неподходящих элементах.
event.target и его роль в обработке событий

Свойство event.target используется внутри обработчиков событий для определения элемента, на котором произошло действие. Оно доступно во всех основных типах событий: click, input, change, submit, keydown. Браузер устанавливает значение target до начала всплытия, поэтому оно остаётся неизменным на всех этапах прохождения события.
При назначении обработчика через addEventListener target позволяет отделить место регистрации слушателя от фактического источника события. Это особенно важно при работе с вложенными элементами, где один клик может задействовать несколько уровней DOM.
Через event.target можно получить прямой доступ к свойствам элемента:
значение поля ввода через value, состояние чекбокса через checked, атрибуты через getAttribute, а также пользовательские данные через dataset.
В обработке кликов target часто используется для проверки типа узла. Сравнение event.target.tagName или наличие класса позволяет точно определить, должна ли выполняться логика обработчика. Такой подход предотвращает срабатывание кода при клике по вспомогательным элементам разметки.
При работе с динамическим контентом event.target остаётся корректным даже для элементов, добавленных после загрузки страницы. Это делает его базовым инструментом при создании интерфейсов с изменяемым DOM, где повторное назначение обработчиков приводит к ошибкам и дублированию кода.
В формах target используется для точечного реагирования на ввод данных. Один обработчик на форме может отслеживать изменения разных полей, определяя конкретный элемент по event.target и применяя проверку или форматирование только к нему.
Для надёжной обработки событий рекомендуется всегда учитывать возможную вложенность элементов. Если логика должна выполняться для родительского узла, следует явно переходить от event.target к нужному элементу, а не полагаться на совпадение структуры разметки.
Разница между event.target и event.currentTarget

Свойства event.target и event.currentTarget часто путают, хотя они решают разные задачи. Оба доступны внутри обработчика события, но указывают на разные DOM-элементы и используются в разных сценариях.
event.target содержит элемент, на котором произошло действие пользователя. Это исходная точка события, определяемая браузером до начала всплытия. Значение target не меняется при прохождении события через родительские узлы.
event.currentTarget указывает на элемент, на котором в данный момент выполняется обработчик. Его значение зависит от того, где был зарегистрирован слушатель через addEventListener. При всплытии события currentTarget меняется на каждом уровне DOM.
На практике разница хорошо заметна при клике по вложенному элементу. Если обработчик назначен на контейнер, а клик выполнен по кнопке внутри него, event.target будет ссылаться на кнопку, а event.currentTarget – на контейнер.
Использование event.target оправдано, когда требуется определить конкретный элемент интерфейса, инициировавший событие: пункт списка, иконку, поле ввода. Это стандартный вариант при делегировании событий.
event.currentTarget применяется, когда логика должна выполняться относительно элемента, на котором висит обработчик. Это полезно при работе с одинаковыми блоками, где обработчик назначается на каждый контейнер отдельно.
Для корректной обработки событий рекомендуется чётко определять, какое свойство требуется в конкретном случае. Если код зависит от структуры разметки, предпочтительнее использовать event.currentTarget. Если важен точный источник действия пользователя – event.target.
Получение DOM-элемента через target при клике
В JavaScript свойство event.target позволяет определить конкретный элемент DOM, на котором произошло событие. Оно возвращает ссылку на элемент, с которым пользователь взаимодействовал, что особенно важно при обработке кликов в сложной структуре HTML.
Пример:
document.addEventListener('click', function(event) {
if (event.target.tagName === 'BUTTON') {
console.log(event.target.textContent);
}
});
Важно учитывать, что event.target всегда указывает на элемент, на котором сработало событие, а не на тот, к которому привязан обработчик. Это отличие позволяет точно определять источник клика при использовании делегирования событий.
При работе с вложенными элементами можно комбинировать event.target с методами closest() или parentElement для поиска нужного родительского узла. Например, если нужно получить родительский контейнер кнопки:
Пример:
document.addEventListener('click', function(event) {
const container = event.target.closest('.container');
if (container) {
console.log(container.id);
}
});
Использование event.target упрощает обработку событий на динамически созданных элементах, снижает количество обработчиков и повышает производительность за счёт делегирования. Это основной инструмент при работе с интерактивными интерфейсами и динамическими списками.
Использование target при делегировании событий
Свойство event.target позволяет определить элемент, на котором произошло событие, что критично для делегирования событий. Делегирование позволяет назначить один обработчик на родительский элемент вместо множества обработчиков на дочерних элементах.
Пример делегирования кликов по списку:
HTML:
<ul id="menu">
<li data-action="open">Открыть</li>
<li data-action="save">Сохранить</li>
<li data-action="delete">Удалить</li>
</ul>
JavaScript:
document.getElementById('menu').addEventListener('click', function(event) {
const item = event.target;
if (item.tagName === 'LI') {
console.log('Выбрано действие: ' + item.dataset.action);
}
});
При работе с делегированием удобно использовать таблицу соответствий действий:
| data-action | Описание |
|---|---|
| open | Открыть файл или элемент |
| save | Сохранить текущие данные |
| delete | Удалить выбранный элемент |
Комбинация event.target и dataset позволяет быстро определять назначение элемента, избегая привязки отдельных обработчиков к каждому дочернему узлу. Это повышает производительность, упрощает поддержку кода и обеспечивает работу с динамически добавляемыми элементами.
Типичные ошибки при работе с target и способы их избежать
Использование event.target в JavaScript может вызвать неожиданные результаты при неправильной обработке. Ниже перечислены распространённые ошибки и рекомендации по их предотвращению.
- Ошибка: прямое использование event.target без проверки типа элемента.
- Ошибка: обработка кликов на вложенных элементах, что приводит к некорректной логике.
- Ошибка: ожидание, что event.target всегда равен элементу с обработчиком.
- Ошибка: модификация DOM напрямую на event.target, игнорируя возможное наличие вложенных элементов.
- Ошибка: добавление обработчиков на большое количество элементов вместо делегирования.
Решение: проверять tagName или использовать closest() для нахождения нужного родителя.
Решение: применять делегирование через родительский контейнер и фильтровать дочерние элементы по селектору.
Решение: различать event.target и this внутри обработчика, использовать их по назначению.
Решение: использовать closest() или parentElement, чтобы модифицировать нужный уровень структуры.
Решение: использовать один обработчик на родительском элементе и определять цель через event.target.
Правильное использование event.target снижает количество ошибок, повышает производительность и упрощает поддержку кода. Проверка типа элемента, делегирование и аккуратная работа с DOM предотвращают большинство проблем.
Примеры кода с target для форм и списков

Использование event.target позволяет точно определять элемент, с которым произошло событие, что важно для форм и списков с динамическим содержимым.
Пример 1: обработка отправки формы
<form id="loginForm">
<input type="text" name="username" placeholder="Имя">
<input type="password" name="password" placeholder="Пароль">
<button type="submit">Войти</button>
</form>
document.getElementById('loginForm').addEventListener('submit', function(event) {
event.preventDefault();
const input = event.target.querySelector('input[name="username"]');
console.log('Имя пользователя:', input.value);
});
Пример 2: делегирование кликов по списку
<ul id="taskList">
<li>Задача 1</li>
<li>Задача 2</li>
<li>Задача 3</li>
</ul>
document.getElementById('taskList').addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
event.target.classList.toggle('completed');
console.log('Изменён элемент:', event.target.textContent);
}
});
Для форм event.target указывает на саму форму, что позволяет получать данные всех полей без привязки к конкретным input. Для списков делегирование с использованием event.target обеспечивает работу с динамически добавляемыми элементами без необходимости добавлять обработчик на каждый li.
