单击时 Bootstrap 下拉菜单关闭

IT技术 javascript html drop-down-menu twitter-bootstrap
2021-03-01 04:38:08

我将一个表单放在引导程序下拉列表中,但是当我单击表单中的任何字段时,下拉列表消失了。我有这段代码,但我不知道把它放在哪里以防止下拉菜单消失。

$(function test() {
  // Setup drop down menu
  $('.dropdown-toggle').dropdown();

  // Fix input element click problem
  $('.dropdown input, .dropdown label').click(function(e) {
    e.stopPropagation();
  });
});

有人可以告诉我应该把这个放在哪里吗?我在引导下拉菜单中尝试过,在 HTML 中尝试过,但仍然无法正常工作。

6个回答

你可以一起省略下拉调用,引导下拉没有它就可以工作。确保正确包装脚本,您可以将其包含在页面的标题或正文中,尽管我个人更喜欢将其放置在页面的正文中。

JS

<script type="text/javascript">
    $('.dropdown-menu input, .dropdown-menu label').click(function(e) {
        e.stopPropagation();
    });
</script>
@SorinCioban 您试图阻止点击事件传播的表单元素是什么?顶行仅针对输入和标签表单元素。您的下拉表单中是否还有其他表单元素可用?另外,.dropdown-menu容器是表单元素的父元素吗?
2021-04-17 04:38:08
我已经把它放在正文中了,但它仍然不起作用,我可以把它放在 <body> 之后和我的第一个 <div> 之前吗?
2021-04-23 04:38:08
没有其他方法可以解决这个问题e.stopPropagation();吗?在我的情况下,我的下拉菜单中有一个元素需要在单击后出现确认框 - 当此方法处于活动状态时,确认框不起作用
2021-05-09 04:38:08
现在好了。我没有将脚本放在正确的位置。另外,我需要 $('.dropdown-toggle').dropdown(); 声明,因为我在下拉菜单中有一个表格。所以没有它,变量不会传播到我用于表单的脚本中的 $_POST 。
2021-05-16 04:38:08

如果您只想停止关闭某些下拉菜单,而不是全部,那么只需向您的 ul 块添加一个额外的类:

<ul class="dropdown-menu keep-open-on-click">

并使用此代码:

$(document).on('click', '.dropdown-menu', function(e) {
    if ($(this).hasClass('keep-open-on-click')) { e.stopPropagation(); }
});

自从答案被接受以来已经过去了一段时间,但是如果你想保持下拉菜单打开,如果它像一种对话,我认为最好的方法是:

$('.dropdown').dropdown().on("hide.bs.dropdown", function(e) {
            if ($.contains(dropdown, e.target)) {
                e.preventDefault();
            //or return false;
            }
        });
我正在尝试这种方法,但现在根本没有出现下拉列表
2021-04-25 04:38:08

您需要阻止事件冒泡 DOM 树:

$('.dropdown-menu').click(function(e) {
    e.stopPropagation();
});

event.stopPropagation 阻止事件到达最终由 Bootstrap 隐藏菜单处理的节点。

这适用于我的(侧边栏打开一个带有引导程序切换的简单链接)

$('.dropdown').find("a").not('.dropdown-toggle').on("click",function(e){
    e.stopImmediatePropagation();
});
谢谢!我喜欢这种方法,但是我不得不使用 $('dropdown-menu')... 让它工作
2021-05-06 04:38:08