【问题标题】:show/hide twitter bootstrap tabs显示/隐藏 twitter 引导选项卡
【发布时间】:2012-12-28 17:03:14
【问题描述】:

我正在使用引导程序在选项卡下方显示内容,但我想在再次单击选项卡时折叠选项卡。这是我试图开始工作的代码,但无济于事:

    <ul id="myTab" class="nav nav-tabs">
        <li class="square"><a class="story" href="#article1" data-toggle="tab"><img src="#"/></a></li>
        <li class="square"><a class="story" href="#article2" data-toggle="tab"><img src="#g"/></a></li>
        <li class="square"><a class="story" href="#article3" data-toggle="tab"><img src="#"/></a></li>
               <div id="article1" class="tab-pane fade"><p>Lorem ipsum...</p></div>
               <div id="article2" class="tab-pane fade"><p>Lorem ipsum dolor sit amet....</p</div>
               <div id="article3" class="tab-pane fade"><p>Lorem ipsum dolor sit amet...</p></div>
    </ul>

<script>
$('#myTab a').click(function (e) {
            if($(this).tab.hasClass('active')){
                    $(this).tab('hide');
                } else {
                        e.preventDefault();
                        $(this).tab('show');
                    }
                })
</script>

我不确定标签是否应该以这种方式工作...我应该尝试折叠功能吗?

【问题讨论】:

    标签: twitter-bootstrap tabs


    【解决方案1】:

    这是对 Jeromy 解决方案的一个调整,我相信它可以满足您的需求:

    $('#myTab a').click(function (e) {
        var tab = $(this);
        if(tab.parent('li').hasClass('active')){
            window.setTimeout(function(){
                $(".tab-pane").removeClass('active');
                tab.parent('li').removeClass('active');
            },1);
        }
    });
    

    http://jsfiddle.net/NQ97h/39/

    【讨论】:

    • 这行得通,顺便说一句。不需要超时值,因为该函数将在运行当前堆栈的消息队列后执行,即使它被省略
    • 并添加 } else { tab.tab('show'); } 以使选项卡可切换
    • 如果没有 setTimeout (jsfiddle.net/5f2wvgxq/1),我无法让它工作,但是,无论如何(在 Safari 7.1.3 上测试)。你建议的 else 子句似乎没有什么不同(jsfiddle.net/5f2wvgxq/2)。我在答案中引用的小提琴选项卡已经可以切换。对不起,我可能只是误会了。
    • 我指的是可以省略的1 ms 的“超时值”,而不是setTimeout 函数本身。 jsfiddle.net/NQ97h/662。我必须补充一点,它不适合下拉菜单
    【解决方案2】:

    我有一个可以工作的版本(在我的情况下,仅适用于主选项卡,您必须对其进行修改以处理下拉选项卡。)我只是将它放入上面 Jeromy 的 jsfiddle 的一个分支中:@987654321 @

    代码如下:

     $(document).off('click.tab.data-api');
        $(document).on('click.tab.data-api', '[data-toggle="tab"]', function (e) {
            e.preventDefault();
            var tab = $($(this).attr('href'));
            var activate = !tab.hasClass('active');
            $('div.tab-content>div.tab-pane.active').removeClass('active');
            $('ul.nav.nav-tabs>li.active').removeClass('active');
            if (activate) {
                $(this).tab('show')
            }
        });
    

    【讨论】:

      【解决方案3】:

      遇到同样的问题,通过修改bootstrap.js解决了。

      Tab.prototype.show函数上找到tab类定义(通常是1783行)并修改:

      if ($this.parent('li').hasClass('active')) return

      if ($this.parent('li').hasClass('active')) {
                  $this.parent('li').removeClass('active')
                  $(selector).removeClass('active')
                  return
              }
      

      然后它将按预期工作,而无需在您的项目中创建更多“自定义脚本”。

      编辑:

      此修改会影响项目中的每个选项卡面板,但是,如果您只想对所需对象进行此效果,则需要添加一些 data-hide 或类似的东西,例如:

      if ($this.parent('li').hasClass('active')) {
                  if ($this.parent('li').attr('data-hide') == "on") {
                      $this.parent('li').removeClass('active')
                      $(selector).removeClass('active')
                  }
                  return
              }
      

      那么,每个父 &lt;li&gt;data-hide 都会在点击时隐藏。

      【讨论】:

        【解决方案4】:

        我得到了一个有效的引导药丸导航,它支持使用以下代码打开/关闭工具:

        jQuery(function() {
        // Closing active pill when clicking on toggle:
        jQuery(document).off('click.bs.tab.data-api');
        jQuery(document).on('click.bs.tab.data-api', '[data-toggle="pill"]', function(e) {
            e.preventDefault();
            var activeClass = 'active';
            var tab = jQuery(this).attr('href');
            var tab = tab && tab.replace(/.*(?=#[^\s]*$)/, ''); // strip for ie7
            var tab = jQuery(tab);
            if (!tab.hasClass(activeClass)) {
                jQuery(this).tab('show');
            } else {
                jQuery(this).parent().removeClass(activeClass);
                tab.parent().children().removeClass(activeClass);
            }
        });
        

        });

        【讨论】:

          【解决方案5】:

          这样的事情怎么办? show.bs.tab 将始终在 click 之前触发,它会给 click 正确的状态

          $(document).on('show.bs.tab', '#myTab a', function(e) {
             if (!$(e.target).hasClass('active')) {
                $(e.target).addClass('monkeyPatch');
             }
          });
          
          $(document).on('click', '#myTab a', function(e) {
             var tab = $(this);
             if (tab.hasClass('monkeyPatch')) {
                tab.removeClass('monkeyPatch');
             } else {
                $('.tab-pane').removeClass('active');
                tab.parent('li').removeClass('active');
             }
          });
          

          【讨论】:

            【解决方案6】:

            是的,听起来你想要Bootstrap's collapse widget。也就是说,这个 jQuery 将隐藏一个已经处于活动状态的选项卡:

            $('#myTab a').click(function (e) {
                if($(this).parent('li').hasClass('active')){
                    $( $(this).attr('href') ).hide();
                }
            });​
            

            问题是这会阻止隐藏的标签再次显示,所以我认为您不会想要使用它。见http://jsfiddle.net/jhfrench/NQ97h/

            如果您希望能够恢复标签页,请尝试:

            $('#myTab a').click(function (e) {
                if($(this).parent('li').hasClass('active')){
                    var target_pane=$(this).attr('href');
                    $( target_pane ).toggle( !$( target_pane ).is(":visible") );
                }
            });
            

            有关此解决方案,请参阅 http://jsfiddle.net/epT3L/

            【讨论】:

            • 哦,如果你想让它可重复使用,你应该选择$('.nav a'),而不是$('#myTab a')...
            • 谢谢,我实际上将它切换为常规的 jquery slideToggle,并取得了一些成功。
            • 我试过了,但是如果你想重新启用标签,它就不起作用了。
            • @JoãoMosmann:如果你想把它带回来(原发帖人没有要求),试试$('#myTab a').click(function (e) { if($(this).parent('li').hasClass('active')){ var target_pane=$(this).attr('href'); $( target_pane ).toggle( !$( target_pane ).is(":visible") ); } });jsfiddle.net/epT3L
            • Downwoted 因为解决方案不完整,即当一个选项卡被隐藏时,即使从另一个选项卡切换后它也保持隐藏状态
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-09-29
            • 1970-01-01
            • 2017-09-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多