此问题在此处已有答案:
How do I prevent my dropdown from closing when clicking inside it?(3个答案)
四年前就关门了。
我的菜单使用了Bootstrap 3,我不能阻止下拉菜单在单击时关闭。我该怎么做?
JSFiddle
// Add open class if active
$('.sidebar-nav').find('li.dropdown.active').addClass('open');
// Open submenu if active
$('.sidebar-nav').find('li.dropdown.open ul').css("display","block");
// Change active menu
$(".sidebar-nav > li").click(function(){
$(".sidebar-nav > li").removeClass("active");
$(this).addClass("active");
});
// Add open animation
$('.dropdown').on('show.bs.dropdown', function(e){
$(this).find('.dropdown-menu').first().stop(true, true).slideDown();
});
// Add close animation
$('.dropdown').on('hide.bs.dropdown', function(e){
$(this).find('.dropdown-menu').first().stop(true, true).slideUp();
});
4条答案
按热度按时间mum43rcc1#
您需要阻止事件在DOM树中向上冒泡:
event.stopPropagation
防止事件到达最终由Bootstrap隐藏菜单处理的节点。演示:http://jsfiddle.net/wkc5md23/3/
xn1cxnb42#
我相信这应该是一个更合适的解决方案,因为在点击事件上停止传播有时可能会在以后的开发中导致问题。您可以在这里阅读更多信息:http://css-tricks.com/dangers-stopping-event-propagation/相反,此解决方案会停止Bootstraphide(hide.bs.dropdown)事件上的传播,这会阻止传播继续进行到hidden(hidden.bs.dropdown)事件。
下面的代码是我自己编写的,使其在所有Bootstrap下拉菜单上都能工作,因为它最初是从这里开始编写的:防止引导下拉菜单在单击时关闭我个人更喜欢这种方式,因为它使用了内置的引导下拉菜单事件,可以在这里找到:https://getbootstrap.com/docs/3.4/javascript/#dropdowns-events。
qcuzuvrc3#
您可以暂时停用下拉式功能。这是一个解决方法。
下拉“菜单”内带有输入字段的示例:
这可以用于任何可单击的项目,您可以单独定义单击哪些项目可以关闭或不关闭下拉菜单。
bcs8qyzn4#
在单击时未关闭侧边菜单