Вы можете проверить, соответствует ли цель события текущей цели, и только затем запустить функцию обратного вызова:
eventOnCurrentElement(".container", "click", e => {
console.log("clicked div");
});
function eventOnCurrentElement(selector, event, callback) {
document.querySelector(selector).addEventListener(event, e => {
if (e.currentTarget === e.target) {
callback(e)
}
});
}
<p>Click beside the button:</p>
<div class="container">
<button>Click me</button>
</div>
e.currentTarget
всегда относится к элементу, к которому был прикреплен обработчик события, в отличие от e.target
, который идентифицирует элемент, на котором произошло событие.