Tengo un menú desplegable de Bootstrap de Twitter. Como todos los usuarios de Twitter Bootstrap saben, el menú desplegable se cierra al hacer clic (incluso haciendo clic dentro de él).
Para evitar esto, puedo adjuntar fácilmente un controlador de eventos de clic en el menú desplegable y simplemente agregar el famoso 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>
Sin embargo, esto parece un comportamiento fácil y muy común, y dado que carousel-controls
(así como carousel indicators
) los controladores de eventos se delegan al document
objeto, el click
evento en estos elementos ( controles anterior / siguiente , ...) será "ignorado".
$('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();
});
Confiar en Twitter Bootstrap dropdown hide
/ hidden
events no es una solución por las siguientes razones:
- El objeto de evento proporcionado para ambos controladores de eventos no da referencia al elemento cliqueado
- No tengo control sobre el contenido del menú desplegable, por lo que
flag
no es posible agregar una clase o atributo
Este violín es el comportamiento normal y este violín se event.stopPropagation()
agrega.
Actualizar
Gracias a Roman por su respuesta . También encontré una respuesta que puedes encontrar a continuación .
event propagation
se detuvo.