【问题标题】:dropdown tab with split button dropdowns behavior具有拆分按钮下拉行为的下拉选项卡
【发布时间】:2013-10-11 01:24:09
【问题描述】:

我想使用下拉选项卡,但稍作调整:当我按下插入符号时,我想显示一个下拉菜单(不选择选项卡),而如果我按下选项卡语音或下拉菜单之一菜单项,选项卡将被选中。

考虑一下:

如果我按下“Dropdown”的向下插入符号,我想显示这样的下拉菜单:

如果我选择@fat 或@mdo,该选项卡将被选中,否则应将其设置回上面的原始版本。这是选项卡中正常下拉项的实际行为,但标题打开的是下拉菜单而不是打开选项卡,这就是我不想要的。换句话说,我可以打开的标签是三个而不是两个。那么:如何区分这两个组件呢?

【问题讨论】:

    标签: twitter-bootstrap drop-down-menu bootstrap-tabs


    【解决方案1】:

    这是一个不需要任何 JS 调整的解决方案:

    只需使用a tab nav with dropdown 的正常标记

    <ul class="nav nav-tabs nav-justified split-button-nav">
    <li class="active"><a href="#">TAB</a></li>
    <li><a href="#">TAB</a></li>
    <li>
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
            <span class="caret"></span>
        </a>
        <a href="#" class="">Default</a>
          <ul class="dropdown-menu" role="menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
    </li>
    <li><a href="#">TAB</a></li>
    </ul>
    

    如果我们将下拉列表的链接放置在标记中的标签按钮上方,然后向右浮动,它将停留在为标签按钮保留的空间中,但隐藏在其未浮动的兄弟姐妹后面。我们只需要调整它的 z-index 以使其可见和可点击。

    不需要额外的 JS。我在导航中添加了一个 .split-button-nav 类,以便定位 CSS 中的元素。可以看到.nav-justified这个类也被添加了,运行没有任何问题。

    Working jsFiddle here.

    【讨论】:

    • 您使用的是什么版本的引导程序?不过非常漂亮。
    【解决方案2】:

    我做到了。调整其实很简单。

    这是下拉选项卡所需的代码。请注意,它与普通的引导下拉选项卡略有不同:

    <ul class="nav nav-tabs myTabDrop">
      <li id="tabOccrs" class="dropdown">
        <a href="#" class="contentTab dropdown-toggle">Tab (<span class="tabsel">option1</span>) <span class="crtOpenDrop">▾</span></a>
        <ul class="dropdown-menu">
          <li><a href="#dropdown1" data-toggle="tab" class="subtab">Option1</a></li>
          <li><a href="#dropdown2" data-toggle="tab" class="subtab">Option2</a></li>
        </ul>
      </li> 
    </ul>   
    

    我们需要的jquery脚本如下:

    $('.myTabDrop span.crtOpenDrop').click(function (e) {
        e.preventDefault();
    
        $(this).closest("a")
            .addClass("dropdown-toggle")
            .attr("data-toggle", "dropdown");
    });
    
    
    $('.myTabDrop a.contentTab').click(function (e) {
        e.preventDefault();
    
        if(! $(e.target).is("span")) {
            $(this).removeClass("dropdown-toggle")
                .attr("data-toggle", "")
                .tab("show");
        }
    });
    

    当然需要进一步的小调整,但这是一个半完整的解决方案(并且图形完整)

    更新

    我为此需要创建了一个jquery plugin。享受使用it

    【讨论】:

      【解决方案3】:

      请参阅这个 jQuery 插件,用于 twitter 引导,如下拉按钮。当然,还有很大的改进空间。我也不擅长CSS。所以,我已经离开了那部分。

      http://codepen.io/ismusidhu/pen/ptHql

      HTML

      <div id="quickActions" class="btn-group" data-key="split-button">
        <a data-name="quickAction" data-value="customer" data-defaultButton="true">New Customer</a>
        <button type="button" id="xyz" data-toggle="dropdown">
          <span class="caret"></span>
          <span class="sr-only">Toggle Dropdown</span>
        </button>
        <ul data-role="menu" hidden>
          <li><a data-name="quickAction" data-value="customer">Customer</a></li>
          <li><a data-name="quickAction" data-value="supplier">Supplier</a></li>
          <li><a data-name="quickAction" data-value="quote">Quote</a></li>
          <li><a data-name="quickAction" data-value="invoice">Invoice</a></li>
          <li><a data-name="quickAction" data-value="purchase">Purchase</a></li>
          <li><a data-name="quickAction" data-value="reconcile">Bank</a></li>
        </ul>
      </div>
      

      CSS

      [data-key="split-button"].open > [data-role="menu"] {
        display: block;
      }
      

      插件

      (function( $ ) {
      // Plugin definition.
      $.fn.splitButton = function(options) {
      
          // Iterate and reformat each matched element.
          return this.each(function() {
      
              var splitButton = $(this);
              var handle = $('[data-toggle="dropdown"]', splitButton);
              var buttons = $('ul li a', splitButton);
              var defaultButton = $('[data-defaultButton="true"]', splitButton);
              handle.click(function() {
                  $(this).parent().toggleClass('open');
              });
            var clickHandler = function(e) {
                  var $this = $(e.currentTarget);
                  //alert($this.attr('data-value'));
                  if (!$this.attr('data-defaultButton')) {
                      defaultButton.attr("data-value", $this.attr('data-value')).html($this.html());
                  }
              };
              buttons.click(clickHandler);
           defaultButton.click(clickHandler)
      
              $(document).click(function(event) {
                  if (!$(event.target).closest(handle).length) {
                      if ($(handle.parent()).hasClass("open")) {
                          $(handle.parent()).toggleClass('open');
                      }
                  }
              });
          });
      };
      })( jQuery );
      

      用法

      $('#quickActions').splitButton();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-22
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多