【问题标题】:Twitter Bootstrap Dropdown with Tabs insideTwitter Bootstrap 下拉菜单,里面有标签
【发布时间】:2014-02-03 10:54:57
【问题描述】:

我正在尝试制作一个带有标签的下拉菜单。问题是当我单击选项卡时下拉菜单关闭。请参阅此演示:http://jsfiddle.net/timrpeterson/pv2Lc/2/。 (代码转载如下)。

标签锚上的cited suggestion to stopPropagation() 似乎没有帮助。有没有更好的办法?

<script src='http://netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js'></script>
<link href='http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css' rel="stylesheet" type="text/css"/>

<div class="dropdown">
  <a id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html">
    Dropdown <span class="caret"></span>
  </a>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">

    <ul class="nav nav-tabs">
      <li class="active"><a href="#home" data-toggle="tab">Home</a>           </li>
      <li><a href="#profile" data-toggle="tab">Profile</a></li>
      <li><a href="#messages" data-toggle="tab">Messages</a></li>
    </ul>

    <!-- Tab panes -->
    <div class="tab-content">
      <div class="tab-pane active" id="home">HOME asdfasdfsda</div>
      <div class="tab-pane" id="profile">PROFILE asdfafas</div>
      <div class="tab-pane" id="messages">MESSAGES asdfdas</div>
    </div>
  </ul>
</div>

【问题讨论】:

    标签: javascript jquery html twitter-bootstrap twitter-bootstrap-3


    【解决方案1】:

    引用的建议不起作用,因为应该在实际选项卡(即链接)而不是选项卡窗格上调用 .tab('show') 方法。

    所以代码应该是:

    $('.dropdown-menu a[data-toggle="tab"]').click(function (e) {
        e.stopPropagation()        
        $(this).tab('show')
    })
    

    这是一个更新的小提琴:http://jsfiddle.net/pv2Lc/6/

    【讨论】:

    • 是的,这也有效!并且是更简洁的代码,尽管它确实改变了哈希值。
    • @timpeterson 好吧,是的,当然可以...将href 更改为data-target 并解决了,我只是使用了您的原始代码。它并没有说你想要它不同的任何地方......事实上,你去:jsfiddle.net/pv2Lc/7
    • 也适用于 Bootstrap 4。
    【解决方案2】:

    使用特定的引导事件:hide.bs.dropdown(在下拉菜单即将关闭时触发)允许您通过调用 e.preventDefault() 来取消“隐藏”操作。 (doc herescrolldown 组件的特定引导事件列表)

    您可以在用户单击选项卡时激活一个特殊标志,并在下拉列表的hide.bs.dropdown 事件中检查该标志:

    $('#myTabs').on('click', '.nav-tabs a', function(){
        // set a special class on the '.dropdown' element
        $(this).closest('.dropdown').addClass('dontClose');
    })
    
    $('#myDropDown').on('hide.bs.dropdown', function(e) {
        if ( $(this).hasClass('dontClose') ){
            e.preventDefault();
        }
        $(this).removeClass('dontClose');
    });
    

    fiddle
    (我在您的示例中添加了 html id,根据您的需要更改选择器)

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 2012-02-21
      • 2012-03-09
      • 2011-12-27
      • 2023-03-03
      • 2012-04-03
      • 2012-04-09
      • 1970-01-01
      • 2012-07-26
      相关资源
      最近更新 更多