Ich habe ein Formular in ein Bootstrap-Dropdown-Menü eingefügt, aber wenn ich auf eines der Felder im Formular klicke, wird das Dropdown-Menü ausgeblendet. Ich habe diesen Code, weiß aber nicht, wo ich ihn ablegen soll, um zu verhindern, dass das Dropdown-Menü verschwindet.
$(function test() {
// Setup drop down menu
$('.dropdown-toggle').dropdown();
// Fix input element click problem
$('.dropdown input, .dropdown label').click(function(e) {
e.stopPropagation();
});
});
Könnte mir bitte jemand sagen, wo ich das hinstellen soll? Ich habe es im Bootstrap-Dropdown versucht, ich habe es im HTML versucht, aber es funktioniert immer noch nicht.
quelle
.dropdown-menu
Container auch ein übergeordnetes Element Ihrer Formularelemente?e.stopPropagation();
? In meinem Fall habe ich ein Element in meinem Dropdown-Menü, das ein Bestätigungsfeld benötigt, um angezeigt zu werden, nachdem es angeklickt wurde - das Bestätigungsfeld funktioniert nicht, wenn diese Methode aktiv istWenn Sie aufhören möchten, nur einige der Dropdown-Menüs zu schließen, nicht alle, fügen Sie Ihrem ul-Block einfach eine zusätzliche Klasse hinzu:
<ul class="dropdown-menu keep-open-on-click">
Und benutze diesen Code:
$(document).on('click', '.dropdown-menu', function(e) { if ($(this).hasClass('keep-open-on-click')) { e.stopPropagation(); } });
quelle
Die Zeit, die vergangen ist, seit die Antwort akzeptiert wurde, aber wenn Sie das Dropdown geöffnet lassen möchten, wenn es sich wie eine Art Dialog verhält, denke ich am besten:
$('.dropdown').dropdown().on("hide.bs.dropdown", function(e) { if ($.contains(dropdown, e.target)) { e.preventDefault(); //or return false; } });
quelle
Sie müssen verhindern, dass das Ereignis den DOM-Baum sprudelt:
$('.dropdown-menu').click(function(e) { e.stopPropagation(); });
event.stopPropagation verhindert, dass das Ereignis den Knoten erreicht, auf dem es schließlich vom Bootstrap-Ausblendmenü verarbeitet wird.
quelle
Dies funktioniert für meine (seitliche Seitenleiste, die einen einfachen Link mit dem Bootstrap-Umschalter öffnet)
$('.dropdown').find("a").not('.dropdown-toggle').on("click",function(e){ e.stopImmediatePropagation(); });
quelle
Vielen Dank für die obige Antwort. Ich hatte das gleiche Problem mit Untermenüs unter den Dropdown-Menüs. Mit der obigen Lösung konnte ich das Problem auch dafür lösen.
$('.dropdown-menu .dropdown-submenu a[data-toggle="dropdown-submenu"]').click(function (e) { e.stopPropagation(); });
quelle
Stellen
<script type="text/javascript"> $('.dropdown-menu').click(function(e) { e.stopPropagation(); }); </script>
Entfernen Sie bei der ursprünglichen Antwort alle Klassen und setzen Sie einfach die Klasse ".dropdown-menu" ein. Es hat bei mir funktioniert. Ich habe ein Eingabefeld im Dropdown-Menü.
quelle
Wenn Sie sich die Quellen des Dropdown-Widgets ansehen, sehen Sie Folgendes:
$(document) .on('click.bs.dropdown.data-api', '.dropdown form', function(e) { e.stopPropagation() })
Sie haben also folgende Möglichkeiten:
$(document) .on('click.my', '.dropdown some_selector', function(e) { e.stopPropagation() })
quelle