Diese Frage wurde mehrmals gestellt, jedoch scheint keine der Antworten für mich zu funktionieren.
Die CSS des Div ist wie folgt:
#info{
display: none;
position: fixed;
z-index: 500;
height: 50%;
width: 60%;
overflow: auto;
background: rgba(187, 187, 187, .8);
}
Ich habe versucht, folgenden Code zu verwenden:
$("#info").click(function(e){
e.stopPropagation();
});
$(document).click(function(){
$("#info").hide();
});
sowie diesen Code:
$(document).mouseup(function (e){
var container = $("#info");
if (container.has(e.target).length === 0) {
container.hide();
}
});
Immer wenn ich auf das div klicke, verschwindet es auch, kein Hinweis warum, aber es tut es.
... Was sonst noch funktionieren könnte?
Da Ihr Ziel id=info
hat, können Sie Folgendes versuchen:
$(document).click(function(e) {
// check that your clicked
// element has no id=info
if( e.target.id != 'info') {
$("#info").hide();
}
});
Sie können auch versuchen:
$(document).click(function() {
if( this.id != 'info') {
$("#info").hide();
}
});
$(document).click(function(e) {
// check that your clicked
// element has no id=info
// and is not child of info
if (e.target.id != 'info' && !$('#info').find(e.target).length) {
$("#info").hide();
}
});
Hängen Sie einen onclick
-Ereignishandler an das document
-Objekt an:
$(document).click(function(e) {
if(e.target.id != 'info') {
$("#info").hide();
}
});
Demo: http://jsfiddle.net/aUjRG/
Hier ist eine Lösung in reinem JavaScript, die Ihnen hilft zu verstehen, was passiert:
function hideInfo(){
if(window.event.srcElement.id != 'info'){
document.getElementById('info').style.display = 'none';
}
}
document.onclick = hideInfo;
Demo: http://jsfiddle.net/mmzc8/
Bei beiden Lösungen wird geprüft, ob sich der Ort, auf den der Benutzer geklickt hat, auf dem Element mit der ID info
befindet. Angenommen, der Benutzer hat nicht auf das Element info
geklickt, und das Element info
wird ausgeblendet.
Versuchen Sie diesen Code, das ist das Beste für mich.
jQuery('.button_show_container').click(function(e) {
jQuery('.container').slideToggle('fast');
e.stopPropagation();
});
jQuery(document).click(function() {
jQuery('.container').slideUp('fast');
});
Um sicherzustellen, dass Sie eine Lösung haben, die auch auf iPads funktioniert, müssen Sie stattdessen den folgenden Funktionstrigger verwenden:
$(document).on("mousedown touchstart",function(e){
var $info = $('#info');
if (!$info.is(e.target) && $info.has(e.target).length === 0) {
$info.hide();
}
});
Wenn Sie den Mouseup abdecken möchten, fügen Sie "touchend" hinzu:
$(document).on("mouseup touchend",function(e){
...
});
Sie können nur eine Klasse hinzufügen, um zu prüfen, ob das betreffende div oder ein Element innerhalb dieses div-Elements angeklickt wurde oder nicht.
$(document).click(function(e){
if ( !$(e.target).hasClass("[class name for check]") &&
$("[element class or id]").css("display")=="block" ) {
//...code if clicked out side div
}
});