Ich habe also ein Dropdown-Menü, das auf einen Klick gemäß den Geschäftsanforderungen angezeigt wird. Das Menü wird wieder ausgeblendet, nachdem Sie die Maus entfernt haben.
Aber jetzt werde ich gebeten, es an Ort und Stelle zu lassen, bis der Benutzer irgendwo auf das Dokument klickt. Wie kann dies erreicht werden?
Dies ist eine vereinfachte Version von dem, was ich jetzt habe:
$(document).ready(function() {
$("ul.opMenu li").click(function(){
$('#MainOptSubMenu',this).css('visibility', 'visible');
});
$("ul.opMenu li").mouseleave(function(){
$('#MainOptSubMenu',this).css('visibility', 'hidden');
});
});
<ul class="opMenu">
<li id="footwo" class="">
<span id="optImg" style="display: inline-block;"> <img src="http://localhost.vmsinfo.com:8002/insight/images/options-hover2.gif"/> </span>
<ul id="MainOptSubMenu" style="visibility: hidden; top: 25px; border-top: 0px solid rgb(217, 228, 250); background-color: rgb(217, 228, 250); padding-bottom: 15px;">
<li>some</li>
<li>nav</li>
<li>links</li>
</ul>
</li>
</ul>
Ich habe so etwas versucht und $('document[id!=MainOptSubMenu]').click(function()
dachte, es würde alles auslösen, was nicht auf der Speisekarte stand, aber es hat nicht funktioniert.
Antworten:
Schauen Sie sich den Ansatz an, den diese Frage verwendet hat:
Wie erkenne ich einen Klick außerhalb eines Elements?
quelle
Die Antwort ist richtig, aber es wird ein Listener hinzugefügt, der jedes Mal ausgelöst wird, wenn ein Klick auf Ihre Seite auftritt. Um dies zu vermeiden, können Sie den Listener nur einmal hinzufügen:
Bearbeiten: Wenn Sie die
stopPropagation()
Schaltfläche auf der ersten Seite vermeiden möchten, können Sie diese verwendenquelle
e.stopPropagation()
in Chrome verwenden, um zu verhindern, dass das erste Ereignis imone()
HandlerDas
stopPropagation
Optionen sind schlecht, da sie andere Ereignishandler stören können, einschließlich anderer Menüs, die möglicherweise enge Handler an das HTML-Element angehängt haben.Hier ist eine einfache Lösung, die auf der Antwort von user2989143 basiert :
quelle
Wenn die Verwendung eines Plugins in Ihrem Fall in Ordnung ist, empfehle ich das Clickoutside-Plugin von Ben Alman, das sich hier befindet :
Die Verwendung ist so einfach:
hoffe das hilft.
quelle
2 Optionen, die Sie untersuchen können:
quelle
Ich habe eine Variante von Grsmtos Lösung gefunden und Dennis 'Lösung hat mein Problem behoben.
quelle
Ich verwende diese Lösung mit mehreren Elementen mit demselben Verhalten auf derselben Seite:
stopPropagation () ist eine schlechte Idee, da dies das Standardverhalten vieler Dinge, einschließlich Schaltflächen und Links, verletzt.
quelle
$target.closest('#menu-container, #menu-activator').length === 0
Ich habe vor kurzem das gleiche Problem konfrontiert. Ich habe folgenden Code geschrieben:
Es hat bei mir perfekt funktioniert.
quelle
was ist damit?
quelle
Ich finde es nützlicher, Mousedown-Ereignis anstelle von Klick-Ereignis zu verwenden. Das Klickereignis funktioniert nicht, wenn der Benutzer mit Klickereignissen auf andere Elemente auf der Seite klickt. In Kombination mit der one () -Methode von jQuery sieht es so aus:
quelle
Sogar ich bin auf die gleiche Situation gestoßen und einer meiner Mentoren hat mir diese Idee vermittelt.
Schritt: 1 Wenn Sie auf die Schaltfläche klicken, auf der das Dropdown-Menü angezeigt werden soll. Fügen Sie dann den folgenden Klassennamen "more_wrap_background" zur aktuell aktiven Seite hinzu, wie unten gezeigt
Schritt 2 Fügen Sie dann einen Klick für das div-Tag wie hinzu
Dabei ist hideDropDown die Funktion, die aufgerufen werden soll, um das Dropdown-Menü auszublenden
Schritt 3 und ein wichtiger Schritt beim Ausblenden des Dropdown-Menüs ist das Entfernen der Klasse, die Sie zuvor hinzugefügt haben
Ich entferne, indem ich seine ID im obigen Code verwende
quelle
Und es ist besser, den Listener nur einzustellen, wenn Ihr Menü sichtbar ist, und den Listener immer zu entfernen, wenn das Menü ausgeblendet wird.
quelle
Ich denke, Sie brauchen so etwas: http://jsfiddle.net/BeenYoung/BXaqW/3/
Ich hoffe es ist nützlich für dich!
quelle
Verwenden Sie den Selektor ': sichtbar'. Wobei .menuitem die zu versteckenden Elemente sind ...
Oder wenn Sie bereits die .menuitem-Elemente in einer var ...
quelle
Es muss nicht kompliziert sein.
quelle