Möglichkeit 1:
Dafür kannst du event.stopPropagation() benutzen:
Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
Javascript:
$(document).ready(function(){
$(".wrapper").click(function(){
$(this).children(".siblings").toggle();
});
$(".wrapper a").click(function(e) {
e.stopPropagation();
});
});
Fiddle: https://jsfiddle.net/kai_noack/gu3dxspk/3/
Tipp: Wenn du alle Kinder von .wrapper
ausschließen möchtest, dann nutze $(".wrapper *")
.
Möglichkeit 2
Eine Alternative, die ich auch häufig verwende:
$('.wrapper').click(function(e){
// mache nichts, wenn .wrapper nicht direkt geklickt wurde
if(e.target !== e.currentTarget){
return;
}
// ein Child von .wrapper wurde geklickt
$(this).children(".siblings").toggle();
});
Fiddle: https://jsfiddle.net/kai_noack/18grmqwu/2/
Möglichkeit 3:
Das nutze ich für die Lounge oben rechts bei den Benachrichtigungen.
// Klick wird auf gesamten Webseite "document" registriert
$(document).click(function(event)
{
// Klick außerhalb des Benachrichtigungsfensters #nfyWrap, wir stellen sicher,
// dass wir nicht auf das Fenster selbst klicken
if($(event.target).parents().index($('#nfyWrap')) == -1)
{
// ist das Benachrichtigungsfenster zu sehen, dann blende es aus
if($('#nfyWrap').is(':visible'))
{
$('#nfyWrap').fadeOut(500);
}
}
});