单击里面,避免关闭下拉菜单
我有一个Twitter Bootstrap下拉菜单。正如所有Twitter Bootstrap用户都知道的那样,下拉菜单会在点击时关闭(甚至在其中单击)。
为了避免这种情况,我可以在下拉菜单上轻松附加一个click事件处理程序,只需添加着名的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>
然而,这看起来很容易并且是非常常见的行为,并且由于carousel-controls
(以及carousel indicators
)事件处理程序被委托给document
对象,因此click
这些元素上的事件(prev / nextcontrols,...)将被“忽略”。
$('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();});
由于以下原因,依赖Twitter Bootstrap下拉hide
/ hidden
事件不是解决方案:
两个事件处理程序提供的事件对象都不提供对单击元素的引用
我无法控制下拉菜单内容,因此flag
无法添加类或属性
这个小提琴是正常的行为,这个小提琴是event.stopPropagation()
附加的。
函数式编程