Bootstrap 3中的子菜单:添加点击打开功能

3
我正在尝试在Bootstrap 3中创建子菜单(我们都知道它们已被删除),我希望能够在单击而不是悬停时显示菜单的第二级和第三级。然而,每当我单击第二级或第三级时,它只是关闭下拉菜单,就好像它正在切换常规的Bootstrap打开/关闭功能一样。
我需要按以下方式工作... 1.) 单击顶部级别-显示下拉项 2.) 从下拉中选择一个项目-显示第二级项目 3.) 从第二级中选择一个项目-显示第三级项目
基本上,我想激活这个CSS类。
.dropdown-submenu:hover>.dropdown-menu{display:block;}

点击而非悬停触发。

目前我已尝试了以下方法:

链接到Fiddle http://jsfiddle.net/Tenacity/ejLDg/1/

最好您能将您的解决方案放在这个Fiddle上。请随意修改这个示例以实现解决方案,因为我完全无法解决。提前感谢您。

HTML代码:

<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="index.html">Your Logo Here</a>
      </div>
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav">           
            <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="test1">Top Level <b class="caret"></b></a>         
                <ul class="dropdown-menu">



                 <li class="dropdown-submenu">
                    <a tabindex="-1" href="#">To 2nd</a>
                    <ul class="dropdown-menu">
                      <li class="dropdown-submenu">
                        <a href="#">2nd to 3rd</a>
                        <ul class="dropdown-menu">
                            <li><a href="#">3rd level</a></li>
                        </ul>
                      </li>
                    </ul>
                  </li>
                </ul>
            </li>          
        </ul>
      </div>
    </nav>

CSS(层叠样式表)
.dropdown-submenu{position:relative;}
.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
.dropdown-submenu:hover>.dropdown-menu{display:block;}
.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}

The JS

$(document).ready(function() {
   $('.dropdown-submenu').on('click', function(){
   $(this).parent().addClass('open');
   $(".btn-navbar").click();
   alert("clicked");
  });
});

感谢您的提前帮助 :D

为什么不尝试使用JS来更改CSS样式呢?试试这个。$('.dropdown-submenu').click(function(){ $('.dropdown-submenu:hover > .dropdown-menu').css('display','block'); return false; }); - Shiplu
1个回答

8

看一下:

$( ".dropdown-submenu" ).click(function(event) {
    // stop bootstrap.js to hide the parents
    event.stopPropagation();
    // hide the open children
    $( this ).find(".dropdown-submenu").removeClass('open');
    // add 'open' class to all parents with class 'dropdown-submenu'
    $( this ).parents(".dropdown-submenu").addClass('open');
    // this is also open (or was)
    $( this ).toggleClass('open');
});

演示: http://jsfiddle.net/ejLDg/18/


这个非常有效率,运行得很好。父选择器是关键所在。谢谢,做得很棒。 - Michael Kirkham
快速提问:我注意到,如果用户打开了几个菜单,然后点击导航菜单之外的区域(这会激活关闭功能),那么如果您返回到菜单项,则所有菜单级别仍然处于打开状态。是否有一种方法可以将您的修复应用于菜单的所有级别,以便用户在屏幕外单击时?再次感谢。 - Michael Kirkham
请看这里:http://jsfiddle.net/ejLDg/23/。 你可以阅读文档:http://getbootstrap.com/javascript/#dropdowns-usage 在事件hidden.bs.dropdown中使用 - (当下拉菜单隐藏时) - meni181818
1
这不会在单击其他子菜单时隐藏已打开的子菜单 请在此处检查更好的解决方案 here,希望能帮助到某些人。 - Shaiju T
1
感谢@stom...最初我无法打开那个链接(尽管后来成功了),但我也在Wayback Machine(互联网档案馆)上找到了它:https://web.archive.org/web/20160507042157/http://www.bootply.com/97919 - Keith DC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接