2017-06-06 4 views
0

nur wundernd, warum, wenn ich innerhalb des Containers die Alarm-Popups trotz der if-Anweisung klicken, damit sie beim Klicken nicht angezeigt wird.JQuery - Warum event.target funktioniert in dieser Situation nicht?

Auch wie würde ich für die Kinder im Inneren testen?

https://jsfiddle.net/w8fd3m67/

$(window).on("click", function(event) { 
 
    var container = $("#container"); 
 
    if ((event.target) !== container) { 
 
    alert("clicked outside"); 
 
    } 
 
});
body { 
 
    height: 600px; 
 
} 
 

 
#container { 
 
    padding: 2rem; 
 
    background: grey; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 

 
</div>

Prost

+2

Weil Sie hier eine DOM-Element-Referenz (event.target) mit einem jQuery-Objekt vergleichen. – CBroe

Antwort

1

sollten Sie verwenden .is()

if($(event.target).is(container)) 
1

Verwenden .is() Funktion zur Zusammenarbeit mpare das Ereignisziel zu Ihrem JQuery-Element:

$(window).on("click", function(event) { 
 
    var container = $("#container"); 
 
    if ($(event.target).is(container)) { 
 
    alert("clicked outside"); 
 
    } 
 
});
body { 
 
    height: 600px; 
 
} 
 

 
#container { 
 
    padding: 2rem; 
 
    background: grey; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 

 
</div>

+0

Was ist zu prüfen, ob Kinder drinnen sind? Und hat sich das mit JQuery geändert? Warum funktioniert mein Beispiel nicht? Prost –

+0

Die Zielelement Kinder sind über die '.children()' Funktion erreichbar. Ihr Beispiel funktionierte nicht, weil Sie ein JQuery-Objekt mit einem DOM-Element verglichen haben. – Zenoo

1

die id vergleichen. Hier $("#container") ist ein jQuery-Objekt

$(window).on("click", function(event) { 
 
    if ((event.target.id) !== 'container') { 
 
    alert("clicked outside"); 
 
    } 
 
});
body { 
 
    height: 600px; 
 
} 
 

 
#container { 
 
    padding: 2rem; 
 
    background: grey; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 

 
</div>

1

Sie ein DOM-Element zu einem jQuery-Objekt verglichen werden, die nie übereinstimmen. Erstellen Sie ein jQuery-Objekt außerhalb des Ziels und überprüfen Sie, ob es sich um einen Nachkomme von #container handelt. Dies funktioniert auch, wenn Sie unter #container untergeordnete Elemente haben.

Updated fiddle

$(window).on("click", function(event) { 
    if ($(event.target).closest('#container').length == 0){ 
    alert("clicked outside"); 
    } 
}); 
1

versuchen Sie dies:

$(window).on("click", function(event) { 
var container = $("#container"); 
if ((event.target) !== container[0]) { 
    alert("clicked outside"); 
}}); 
Verwandte Themen