Как исключить внутренние элементы при обработке события клика?

Есть такой блок кода:
<div data-type="root">
	<p>Element p</p>
	<span>Element span</span>
</div>


const div = document.querySelector('div');
div.addEventListener('click', clickHandler);
function clickHandler(event) {
	const {type} = event.target.dataset;
	console.log(type);
}

При клике на внутренние теги p и span в консоле выводится undefined и только на пустоте div'а выводит root.
Как можно исключить внутренние элементы для события клика, чтобы при клике по всей площади div'а получать в ответ root?
  • Вопрос задан
  • 306 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Используйте currentTarget, если внутри обработчика нужен элемент, к которому обработчик привязан.

Или вместо объекта события можете воспользоваться this - это и будет ссылка на нужный элемент. Конечно, только в том случае, если какое-то другое значение не было заранее привязано к обработчику (как такое может быть - bind и стрелочные функции).

Ещё бывает так (не ваш случай, но упомянуть стоит), что обработчик висит выше нужного элемента - в этом случае можно подняться до него от target с помощью closest.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Event.currentTarget возвращает элемент, на которое повешен обработчик события.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект