【问题标题】:Bootstrap Multilevel Dropdown Menu Not ExtendingBootstrap 多级下拉菜单未扩展
【发布时间】:2016-05-27 09:02:21
【问题描述】:

我正在使用 Bootstrap 体验多级下拉菜单,我确保我拥有最新版本的 Bootstrap。我的代码非常简单。问题是子级别没有扩展(未显示)。

我怀疑 html 有问题:

<div class="dropdown">
<a href="#" id = "Service_1" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Service 1 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li>
    <a class="trigger right-caret">Color</a>
    <ul class="dropdown-menu sub-menu">
      <li>Green</li>
      <li>Red</li>
      <li>Blue</li>
    </ul>
</li>
<li class="divider"></li>
<li>
    <a class="trigger right-caret">Names</a>
    <ul class="dropdown-menu sub-menu">
       <li>James</li>
       <li>Mike</li>
       <li>Bob</li>
    </ul>
</li>
</ul>
</div>    

这里是它的一个小提琴:https://jsfiddle.net/9vzk9x9e/3/

请分享您的想法。谢谢。

【问题讨论】:

  • 能否提供脚本代码?
  • Bootstrap 不提供“多级子菜单”。 .dropdown-submenu 的 CSS 规则在哪里?
  • @stratovarius 请查看添加的脚本文件
  • @Khalid T 见上文

标签: css twitter-bootstrap drop-down-menu twitter-bootstrap-3 multi-level


【解决方案1】:

你是否包含了jQuery? 顺便说一句,您可以编写相应的 JS 脚本以获得多级子菜单,如下面的代码:

$(function(){
    $(".dropdown-menu > li > a.trigger").on("click",function(e){
        var current=$(this).next();
        var grandparent=$(this).parent().parent();
        if($(this).hasClass('left-caret')||$(this).hasClass('right-caret'))
            $(this).toggleClass('right-caret left-caret');
        grandparent.find('.left-caret').not(this).toggleClass('right-caret left-caret');
        grandparent.find(".sub-menu:visible").not(current).hide();
        current.toggle();
        e.stopPropagation();
    });
    $(".dropdown-menu > li > a:not(.trigger)").on("click",function(){
        var root=$(this).closest('.dropdown');
        root.find('.left-caret').toggleClass('right-caret left-caret');
        root.find('.sub-menu:visible').hide();
    });
});

这是一个很好的例子:

http://jsfiddle.net/chirayu45/yxkut/16/

【讨论】:

  • 这是我正在学习的确切例子。但它在我的机器上不起作用。 @stratovarius
  • 我也使用与小提琴中相同的 css
  • 奇怪,你能在 jsfiddle 中提供你的例子吗?
  • 另外,你连接了 jquery 吗?将此代码 var online = navigator.onLine; alert(online); 放在脚本的开头,看看它返回的是真还是假。
  • 会不会是因为我把脚本文件放在了一个script.js中
【解决方案2】:

您只能使用 CSS 来实现。方法如下:

HTML

<ul class="dropdown-menu" role="menu" aria-labelledby="...">
  ...
  <li class="dropdown-submenu" role="presentation">
    <a href="#" tabindex="-1" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true">Menu item 1</a>
    <ul class="dropdown-menu" role="menu" aria-labelledby="...">
      <li><a role="menuitem" href="#">Submenu item 1</a></li>
      <li><a role="menuitem" href="#">Submenu item 2</a></li>
      ...
    </ul>
  </li>
  ...
</ul>

CSS

/* DROPDOWN SUBMENU */
.dropdown-submenu {
  position: relative;
}

.dropdown-submenu > .dropdown-menu {
  top: 0px;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
  -webkit-border-radius: 0 0 3px 3px;
     -moz-border-radius: 0 0 3px 3px;
          border-radius: 0 0 3px 3px;
}

.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: #ccc;
  margin-top: 5px;
  margin-right: -10px;
}

.dropdown-submenu:hover > a:after {
  border-left-color: #ffffff;
}

.dropdown-submenu.pull-left {
  float: none;
}

.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
  -webkit-border-radius: 0 0 6px 6px;
     -moz-border-radius: 0 0 6px 6px;
          border-radius: 0 0 6px 6px;
}

.dropdown-submenu:hover > a {
  background-color: #f88e1d;
  background-image: none;
  color: #fff;
}

.navbar-default .navbar-nav .dropdown-submenu > a:after {
  border-width: 0;
}

.navbar-nav .dropdown-submenu:hover > a {
  background-color: transparent;
}

.navbar-nav .dropdown-submenu ul {
  display: block;
  padding-left: 20px;
}

【讨论】:

  • 谢谢,但我也很好奇为什么带有javascript的版本不起作用
  • 我认为您的 JSFiddle 有效。我刚刚测试过了。您只需要在 Javascript 面板中启用 jQuery 1.12.0(并设置“加载类型”:onDomready)
【解决方案3】:

解决了。问题出在我的css中,我省略了这部分。

.right-caret:after
{   border-left: 5px solid #ffaf46;
}
.left-caret:after
{   border-right: 5px solid #ffaf46;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 2012-04-03
    • 2020-12-01
    • 1970-01-01
    • 2021-01-02
    • 2016-09-10
    • 2023-02-09
    • 2020-10-03
    相关资源
    最近更新 更多