У меня есть div, в котором распологаются img и a. Нужно вызвать событие при клике по любой области этого элемента: и по пустой, и по тем, где расположены другие элементы. Но получилось так, что a вызывает событие раньше чем div, что делает работу события некоректной. Как сделать div единственным объектом события с помощью JQuery?
$(document).ready(function() {
$('div').on('click', event);
});
function event(ev) {
alert(ev.target.nodeName);
$(ev.target).addClass('active');
}
div {
padding: 10px;
background: yellow;
}
.active {
background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<img src="" alt="image">
<br>
<a>Text</a>
</div>
Не очень понятно, что требуется в конечном итоге получить, но на сколько я понял, речь идет о "перехвате", чего конечно же нет, просто event.target возвращает непосредственный элемент с которым происходит взаимодействие, в отличии от event.currentTarget или this, который в свою очередь являются ссылкой на элемент к которому привязан слушатель.
$(document).ready(function() {
$('div').on('click', event);
});
function event(ev) {
console.log('currentTarget: ', ev.currentTarget.nodeName);
console.log('this: ', this.nodeName);
console.log('target: ', ev.target.nodeName);
$(ev.currentTarget).addClass('active');
}
div {
padding: 10px;
background: yellow;
}
.active {
background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<img src="" alt="image">
<br>
<a>Text</a>
</div>
$(this).addClass('active');
$(document).ready(function() {
$('div').on('click', event);
});
function event(ev) {
$(this).addClass('active'); // this !!!
}
div {
padding: 10px;
background: yellow;
}
.active {
background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<img src="" alt="image">
<br>
<a>Text</a>
</div>
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости