Wie kann ich eine Funktion auslösen, wenn ich auf eine beliebige Stelle auf meiner Seite klicke, außer auf ein div ( id=menu_content
)?
Wie kann ich eine Funktion auslösen, wenn ich auf eine beliebige Stelle auf meiner Seite klicke, außer auf ein div ( id=menu_content
)?
Antworten:
Sie können sich bewerben click
auf body
Dokumenten- und cancel click
Verarbeitung , wenn das click
Ereignis durch div mit id erzeugt wird menu_content
, dieses Ereignis zu einzelnes Element binden und die Bindung des Sparens click
mit jedem Element außermenu_content
$('body').click(function(evt){
if(evt.target.id == "menu_content")
return;
//For descendants of menu_content being clicked, remove this check if you do not want to put constraint on descendants.
if($(evt.target).closest('#menu_content').length)
return;
//Do processing of click event here for every element except with id menu_content
});
closest
mit dem aktuellen Element beginnt, werden sowohl das Klicken auf menu_content
als auch das Klicken auf Nachkommen behandelt. Ich denke, der zweite if
ist alles was du brauchst.
Weitere Informationen finden Sie in der Dokumentation zu jQuery Event Target . Mithilfe der Zieleigenschaft des Ereignisobjekts können Sie erkennen, woher der Klick im #menu_content
Element stammt, und in diesem Fall den Klick-Handler vorzeitig beenden. Sie müssen verwenden .closest()
, um Fälle zu behandeln, in denen der Klick von einem Nachkommen von stammt #menu_content
.
$(document).click(function(e){
// Check if click was triggered on or within #menu_content
if( $(e.target).closest("#menu_content").length > 0 ) {
return false;
}
// Otherwise
// trigger your click function
});
Versuche dies
$('html').click(function() {
//your stuf
});
$('#menucontainer').click(function(event){
event.stopPropagation();
});
Sie können auch externe Ereignisse verwenden
Ich weiß, dass diese Frage beantwortet wurde, und alle Antworten sind nett. Aber ich wollte meine zwei Cent zu dieser Frage für Leute hinzufügen, die ein ähnliches (aber nicht genau dasselbe) Problem haben.
Allgemeiner können wir so etwas tun:
$('body').click(function(evt){
if(!$(evt.target).is('#menu_content')) {
//event handling code
}
});
Auf diese Weise können wir nicht nur Ereignisse behandeln, die von etwas anderem als einem Element mit ID ausgelöst werden, menu_content
sondern auch Ereignisse, die von etwas anderem als einem Element ausgelöst werden, das wir mithilfe von CSS-Selektoren auswählen können.
Zum Beispiel bekomme ich im folgenden Code-Snippet Ereignisse, die von einem beliebigen Element außer allen ausgelöst werden <li>
Elemente, die Nachkommen des div-Elements mit id sind myNavbar
.
$('body').click(function(evt){
if(!$(evt.target).is('div#myNavbar li')) {
//event handling code
}
});
Hier ist was ich getan habe. Ich wollte sicherstellen, dass ich auf eines der Kinder in meinem Datepicker klicken kann, ohne es zu schließen.
$('html').click(function(e){
if (e.target.id == 'menu_content' || $(e.target).parents('#menu_content').length > 0) {
// clicked menu content or children
} else {
// didnt click menu content
}
});
Mein aktueller Code:
$('html').click(function(e){
if (e.target.id != 'datepicker'
&& $(e.target).parents('#datepicker').length == 0
&& !$(e.target).hasClass('datepicker')
) {
$('#datepicker').remove();
}
});