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

Есть такой блок кода:
<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?
  • Вопрос задан
  • 331 просмотр
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Используйте currentTarget, если внутри обработчика нужен элемент, к которому обработчик привязан.

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

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

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект