jQuery как остановить ребенка, вызывая родительские мероприятия
у меня есть div, который я прикрепил onclick событие. в этом div есть тег со ссылкой. Когда я нажимаю на ссылку onclick событие из div также запускается. Как я могу отключить это так, что если ссылка нажата на div onclick не уволили?
сценарий:
$(document).ready(function(){
$(".header").bind("click", function(){
$(this).children(".children").toggle();
});
})
HTML-код:
<div class="header">
<a href="link.html">some link</a>
<ul class="children">
<li>some list</li>
</ul>
</div>
8 ответов:
этого:
$(document).ready(function(){ $(".header").click(function(){ $(this).children(".children").toggle(); }); $(".header a").click(function(e) { e.stopPropagation(); }); });Если вы хотите читать дальше .stopPropagation (), смотрите здесь.
или вместо того, чтобы иметь дополнительный обработчик событий для предотвращения другого обработчика, вы можете использовать Событие Объекта аргумент передается обработчику событий click, чтобы определить, был ли нажат дочерний элемент.
targetбудет щелкнут элемент иcurrentTargetбудет .заголовок див:$(".header").click(function(e){ //Do nothing if .header was not directly clicked if(e.target !== e.currentTarget) return; $(this).children(".children").toggle(); });
лучше использовать on () С цепью, как,
$(document).ready(function(){ $(".header").on('click',function(){ $(this).children(".children").toggle(); }).on('click','a',function(e) { e.stopPropagation(); }); });
ответы здесь приняли вопрос ОП слишком буквально. Как эти ответы могут быть расширены в сценарий, где есть много дочерних элементов, а не только один
<a>тег? Вот один из способов.допустим, у вас есть фотогалерея с затемненным фоном и фотографиями по центру в браузере. Когда вы нажимаете на черный фон (но ничего внутри него), вы хотите, чтобы наложение закрылось.
вот некоторые возможные HTML:
<div class="gallery" style="background: black"> <div class="contents"> <!-- Let's say this div is 50% wide and centered --> <h1>Awesome Photos</h1> <img src="img1.jpg"><br> <img src="img2.jpg"><br> <img src="img3.jpg"><br> <img src="img4.jpg"><br> <img src="img5.jpg"> </div> </div>и вот как будет работать JavaScript:
$('.gallery').click( function() { $(this).hide(); } ); $('.gallery > .contents').click( function(e) { e.stopPropagation(); } );это остановит события щелчка из элементов внутри
.contentsиз всех исследований.galleryтаким образом, галерея будет закрыта только при нажатии в области выцветшего черного фона, но не при нажатии в области содержимого. Это может быть применено ко многим различным сценариям.
или такой:
$(document).ready(function(){ $(".header").click(function(){ $(this).children(".children").toggle(); }); $(".header a").click(function(e) { return false; }); });
более короткий способ сделать это:
$('.header').on('click', function () { $(this).children('a').on('click', function(e) { e.stopPropagation(); $(this).siblings('.children').toggle(); }); });
Comments