【问题标题】:Bootstrap 4: Open tab from inside a tab (second link)Bootstrap 4:从选项卡内部打开选项卡(第二个链接)
【发布时间】:2018-07-19 10:10:36
【问题描述】:

我正在使用这样的 Bootstra 4 选项卡导航:

<nav>
  <div class="nav nav-tabs" id="nav-tab" role="tablist">
    <a class="nav-item nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
    <a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
    <a class="nav-item nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</a>
  </div>
</nav>
<div class="tab-content" id="nav-tabContent">
  <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">

      <a href="">LINK TO THIRD TAB</a>

  </div>
  <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">...</div>
  <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">...</div>
</div>

我现在想使用第一个选项卡内容窗格中的链接从第一个窗格之外打开第三个链接窗格。

如果我使用选项卡导航中的链接(带有数据属性)它不起作用。有没有办法用第二个链接打开标签?

【问题讨论】:

  • 在这里查看这个答案:stackoverflow.com/a/48520606/8270343@dferenc
  • 不幸的是我得到了两个错误。首先是Uncaught RangeError: Maximum call stack size exceededUncaught TypeError: Cannot read property 'nodeName' of undefined

标签: jquery twitter-bootstrap tabs


【解决方案1】:

以下解决方案基于您在我的quoted answer 中已经看到的解决方案,但这个解决方案是在此基础上扩展的,您还想加入滚动到功能。

本质上,使用原生Element.scrollIntoView() javascript方法可以轻松实现滚动。

注意:在示例中,我为选项卡设置了一些边距,以便更好地展示功能。

$('.tab-link').on('click', function(event) {
    // Prevent url change
    event.preventDefault();

    // `this` is the clicked <a> tag
    var target = $('[data-toggle="tab"][href="' + this.hash + '"]');
    
    // opening tab
    target.trigger('click');
    // scrolling into view
    target[0].scrollIntoView(true);
});
#nav {
    margin-top: 90vh;
}

#nav-tabContent {
    margin-bottom: 90vh;
}
<nav id="nav">
    <div class="nav nav-tabs" id="nav-tab" role="tablist">
        <a class="nav-item nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
        <a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
        <a class="nav-item nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</a>
    </div>
</nav>

<div class="tab-content" id="nav-tabContent">
    <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">

      <a class="tab-link" href="#nav-contact">LINK TO THIRD TAB</a>

    </div>
    <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">...</div>
    <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">...</div>
</div>


<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>

【讨论】:

  • 再次感谢您的回答。该链接运作良好。但不幸的是,滚动不起作用。我需要处理特定的容器/锚点吗?
  • target[0] 在我的示例中是要滚动到的普通节点元素。它也可以是例如document.getElementById('nav-tab')。据 caniuse.com 称,所有主流浏览器都支持.scrollIntoView()。一件重要的事情是:您必须在选项卡下方有足够的页面长度。否则你不能滚动到元素。
  • 标签下方确实有足够的空间,但您的第二个示例也不起作用。估计和其他代码有冲突?!
  • 奇怪,没有其他的 JS 代码......而且我使用的资源和你一样(BS,jQuery,Poper,......)
  • OK....这是我链接中的`data-toggle="tab"`...删除它后,它工作正常!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多