Ich habe ein Twitter Bootstrap Dropdown-Menü. Wie alle Twitter Bootstrap-Benutzer wissen, wird das Dropdown-Menü beim Klicken geschlossen (sogar beim Klicken).
Um dies zu vermeiden, kann ich einfach einen Klickereignishandler in das Dropdown-Menü einfügen und einfach den berühmten hinzufügen event.stopPropagation()
.
<ul class="nav navbar-nav">
<li class="dropdown mega-dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-list-alt"></i> Menu item 1
<span class="fa fa-chevron-down pull-right"></span>
</a>
<ul class="dropdown-menu mega-dropdown-menu">
<li>
<div id="carousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-slide-to="0" data-target="#carousel"></li>
<li class="active" data-slide-to="1" data-target="#carousel"></li>
</ol>
<div class="carousel-inner">
<div class="item">
<img alt="" class="img-rounded" src="img1.jpg">
</div>
<div class="item active">
<img alt="" class="img-rounded" src="img2.jpg">
</div>
</div>
<a data-slide="prev" role="button" href="#carousel"
class="left carousel-control">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a data-slide="next" role="button" href="#carousel"
class="right carousel-control">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</li>
</ul>
</li>
</ul>
Dies sieht jedoch einfach aus und ist ein sehr häufiges Verhalten. Da carousel-controls
(sowie carousel indicators
) Ereignishandler an das document
Objekt delegiert werden, wird das click
Ereignis für diese Elemente ( vorherige / nächste Steuerelemente, ...) "ignoriert".
$('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
// The event won't be propagated up to the document NODE and
// therefore delegated events won't be fired
event.stopPropagation();
});
Das Verlassen auf Twitter Bootstrap Dropdown hide
/ hidden
Events ist aus folgenden Gründen keine Lösung:
- Das bereitgestellte Ereignisobjekt für beide Ereignishandler verweist nicht auf das angeklickte Element
- Ich habe keine Kontrolle über den Inhalt des Dropdown-Menüs, daher ist das Hinzufügen einer
flag
Klasse oder eines Attributs nicht möglich
Diese Geige ist das normale Verhalten und diese Geige ist mit event.stopPropagation()
hinzugefügt.
Aktualisieren
Vielen Dank an Roman für seine Antwort . Ich habe auch eine Antwort gefunden, die Sie unten finden können .
event propagation
gestoppt wurde.