从点击结束时停止一个下拉菜单
我有一个button下拉(只有一个,不是所有的),在里面,我想有几个input字段,人们可以在里面input的东西没有下拉隐藏一旦你点击它(但它确实closures如果你点击它之外)。
我创build了一个jsfiddle: http : //jsfiddle.net/denislexic/8afrw/2/
这里是代码,这是基本的:
<div class="btn-group" style="margin-left:20px;"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> Action <span class="caret"></span> </a> <ul class="dropdown-menu"> <!-- dropdown menu links --> <li>Email<input type="text" place-holder="Type here" /></li> <li>Password<input type="text" place-holder="Type here" /></li> </ul> </div>
所以基本上,我希望它不会closures点击下拉(但closures点击的动作button或下拉之外)。 到目前为止,我最好的猜测是添加一个类,并尝试做一些JS,但我无法弄清楚。
谢谢你的帮助。
问题是,当你点击其他任何地方的时候,boostrap下拉式jQuery插件closures了drop-menu。 您可以通过捕获下拉菜单元素上的点击事件并阻止其到达body元素上的click事件侦听器来禁用该行为。
只需添加
$('.dropdown-menu').click(function(event){ event.stopPropagation(); });
jsfiddle可以在这里find
我知道这个问题不是Angular本身,但是对于任何使用Angular的人来说,你可以通过HTML传递事件并停止通过$ event传播:
<div ng-click="$event.stopPropagation();"> <span>Content example</span> </div>
实际上,如果你在Angular.js中,那么为它做一个指令将会更加优雅:
app.directive('stopClickPropagation', function() { return { restrict: 'A', link: function(scope, element) { element.click(function(e) { e.stopPropagation(); }); } }; });
然后,在下拉菜单中,添加指令:
<div class="dropdown-menu" stop-click-propagation> my dropdown content... <div>
特别是如果你想停止传播多个鼠标事件:
... element.click(function(e) { e.stopPropagation(); }); element.mousedown(... element.mouseup(... ...
另一个快速的解决scheme,只需添加onclick
属性的div类有dropdown-menu
:
<div class="dropdown-menu" onClick="event.stopPropagation();">...</div>
在尝试了很多技术之后,我发现最好的一个使用这个技术,这不会导致很简单的缺点:
$(document) .on( 'click', '.dropdown-menu', function (e){ e.stopPropagation(); });
这可以让你也做一些实时绑定内部下拉列表元素。
另外,防止点击,除非点击一个button元素
$('.dropdown-menu').click(function(e) { if (e.target.nodeName !== 'BUTTON') e.stopPropagation(); });
我有这个问题,但在一个反应组件 – 反应组件是在一个窗体的引导下拉菜单。 每次单击下拉菜单中的某个元素时,都会closures,导致input任何内容。
通常的e.preventDefault()
和e.stopPropagation()
在响应应用程序中不起作用,因为jquery事件被立即触发,并在之后尝试干预。
下面的代码允许我解决我的问题。
stopPropagation: function(e){ e.nativeEvent.stopImmediatePropagation(); }
或以ES6格式
stopPropagation(e){ e.nativeEvent.stopImmediatePropagation(); }
希望这可以用于任何与其他答案挣扎的人试图在反应中使用它。