На моей странице есть несколько DIV следующего вида:
<div class='entry'>
This is a statement
<a title="Search @travel" class="app-context-link" href="">@travel</a>
</div>
Когда щелкнут DIV класса.entry, я вызываю следующее:
$(".entry").on('click', function(e) {
console.log("DIV Clicked");
});
Когда щелкнута ссылка класса.app-context-link, я вызываю следующее:
var context_links = document.getElementsByClassName('app-context-link');
for (var k=0;k<context_links.length;++k) {
context_links[k].addEventListener('click', function(e) {
console.log("The context link inside DIV is clicked");
});
}
Вопрос:
Прямо сейчас, когда я нажимаю на ссылку app-context-link, срабатывают оба действия: для DIV (потому что событие.click обнаружено) и для ссылки (потому что там есть прослушиватель событий по ссылке этого класса).
Как сделать так, чтобы при щелчке ссылки DIV на клике jQuery не запускался?
Я попробовал несколько возможностей, ничего не получилось. Кроме того, я бы предпочел не переустанавливать код слишком много, а просто добавить некоторую директиву в части jQuery на клике, чтобы он обнаружил, была ли нажата ссылка и не делает то, что она обычно делала бы, если бы щелкнул DIV.
Спасибо!
Использование распространения остановки:
context_links[k].addEventListener('click', function(e) {
e.stopPropagation(); //Here
console.log("The context link inside DIV is clicked");
});
Это остановит событие щелчка от пузырьков, поэтому, когда вы нажмете на a
, события щелчка его предка не будут срабатывать.
вы можете так использовать
$(".entry").on('click', function(e) {
e.stopPropagation();
alert($(this).prop("tagName"));
});
$(".entry a").on('click', function(e) {
e.preventDefault();
e.stopPropagation();
alert($(this).prop("tagName"));
});
.entry
, который будет обрабатывать щелчки для всех.app-context-link
в div, вместо добавления 1 обработчика для каждой ссылки.