【问题标题】:Linking to a Bootstrap Tab from outside - how to set the tab to "active"?从外部链接到引导选项卡 - 如何将选项卡设置为“活动”?
【发布时间】:2013-11-17 19:57:41
【问题描述】:

我有一个带有 3 个不同内容选项卡的 Bootstrap“选项卡”导航。除了我想从选项卡导航外部链接到其中一个选项卡外,它工作得很好。这意味着当有人单击选项卡窗口外的链接时,它应该设置为“活动”该选项卡并显示内容。

现在,它正确显示了该选项卡的内容,但该选项卡未设置为“活动”。我该如何实现这一点,以便它应该像有人点击一样“活跃”?

代码如下:

<div>
<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>
<div class="tab-content">
  <div class="tab-pane active" id="home">Home Content</div>
  <div class="tab-pane" id="profile">Profile Content</div>
  <div class="tab-pane" id="messages">Messages Content</div>
</div>
</div>

<p></p>

<a href="#profile" data-toggle="tab">Profile Link From Outside</a>

我做了一个 jsFiddle 来更好地展示它:http://jsfiddle.net/fLJ9E/

非常感谢您的任何帮助或提示:)

【问题讨论】:

    标签: jquery css twitter-bootstrap tabs


    【解决方案1】:

    你可以做一个小技巧来实现这一点:

    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        var target = this.href.split('#');
        $('.nav a').filter('[href="#'+target[1]+'"]').tab('show');
    })
    

    http://jsfiddle.net/s6bP9/

    【讨论】:

    • 难道没有办法只使用 HTML 标签来代替 JQuery 或 JavaScript 解决方案吗?例如 data-target="#profile" data-toggle="tab" ?这是引导程序的错误吗?
    【解决方案2】:

    添加外部链接时可能只需要添加/减去类。它根本没有真正绑定到选项卡。

    $(".outside-link").click(function() {
        $(".nav li").removeClass("active");
        $($(this).attr("data-toggle-tab")).parent("li").addClass("active");
    });
    

    工作小提琴:http://jsfiddle.net/Bp2jm/

    【讨论】:

    • 感谢您的回复:)
    【解决方案3】:

    试试这个:

    <li ....> 
    <a href="#tab-number">Tab Title</a>
    </li> 
    

    你的网址看起来像这样:“[URL]#tab-number”

    希望对你有帮助.... 问候...

    【讨论】:

      【解决方案4】:

      下面是我做的对我有用的小技巧。

      我可以调用将引导药丸 ID 添加到 URL 的网页。

      例如调用 mypage.html#other_id 将显示匹配 #other_id 的药丸

      <ul class="nav nav-pills">
          <li class="active"><a href="#default_id" data-toggle="pill">Default tab</a></li>
          <li><a href="#other_id" data-toggle="pill">Other tab</a></li>
      </ul>
      <div class="tab-content">
          <div class="tab-pane active" id="default_id">
          ...
          </div>
          <div class="tab-pane" id="other_id">
          ...
          </div>
      </div>
      

      这里是 JQuery 代码:

      $(document).ready(function(){
          //Manage hash in URL to open the right pill
          var hash = window.location.hash;
          // If a hash is provided 
          if(hash && hash.length>0)
          {
              // Manage Pill titles
              $('ul.nav-pills li a').each(function( index ) {
                  if($(this).attr('href')==hash)
                      $(this).parent('li').addClass('active');
                  else
                      $(this).parent('li').removeClass('active');
              });
              // Manage Tab content
              var hash = hash.substring(1); // Remove the #
              $('div.tab-content div').each(function( index ) {
                  if($(this).attr('id')==hash)
                      $(this).addClass('active');
                  else
                      $(this).removeClass('active');
              });
          }
      });
      

      编辑:我的代码并不完全符合您的需要,但您可以对其进行更新以满足您的需求。如果您需要解释,请告诉我

      【讨论】:

        【解决方案5】:

        最简单的答案是这样做:

        <a href="#" id="profilelink">Profile Link From Outside</a>
        

        然后在javascript中添加:

        $(document).ready(function () {
            $("#profilelink").click(function () {
                $('.nav a[href="#profile"]').tab('show');           
            });
        });
        

        这将使用 jquery 选项卡插件的内置方法更改内容视图和顶部的活动按钮。如果您想在选项卡区域之外添加更多按钮,则可以使其更通用,例如。

        <a href="#profile" class="outsidelink">Profile Link From Outside</a>
        
        
        $(document).ready(function () {
            $(".outsidelink").click(function () {
                $('.nav a[href="' +  $(this).attr("href") + '"]').tab('show');          
            });
        });
        

        【讨论】:

        • 另外,如果页面上有多个选项卡面板,则需要为面板指定一个 id 并在 javascript 中将 .nav 更改为 #panelid。
        • 难道没有办法只使用 HTML 标签来代替 JQuery 或 JavaScript 解决方案吗?例如 data-target="#profile" data-toggle="tab" ?这是引导程序的错误吗?
        • $('.nav a[href="' + $(this).attr("href") + '"]').tab('show') 为我工作,$( '.nav a[href="' + $(this).attr("href") + '"]').trigger('click') 对我不起作用。
        【解决方案6】:

        我遇到了同样的问题,并选择在适当的选项卡上触发点击事件,然后让 Bootstrap 执行所需的操作。

        $('#link').on('click', function(){
          $('.nav-tabs a[href="#profile"]').click();
        });
        

        【讨论】:

        • 考虑到来自the docs$('#someTab').tab('show') 实际上似乎并没有在选项卡控件上设置活动状态,我倾向于这样的事情。
        • .click() 对我不起作用,必须使用 .tab('show')
        【解决方案7】:

        根据 Omiod 的回复, (我没有足够的代表把它作为评论——doh!)

        无需额外的脚本标记即可完成相同操作:

        <a href="javascript:void(0);" onclick="$('.nav-tabs a[href=\'#TABID\']').click();">LINK NAME</a>
        

        【讨论】:

        • 像魅力一样工作 - 非常简短的解决方案。
        • 没有 Jquery:链接名称
        猜你喜欢
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 2019-05-17
        • 2015-09-09
        相关资源
        最近更新 更多