【问题标题】:Bootstrap 4 Collapse nav-tab on click active tab and on pageBootstrap 4 在单击活动选项卡和页面上折叠导航选项卡
【发布时间】:2019-11-02 17:34:33
【问题描述】:

单击导航链接以及在页面上的任意位置完成单击时关闭活动导航选项卡。

我尝试将 removeClass 从 .tab-pane 更改为所有可能的变体,即 tabpanel、nav-item、nav-link 和只是选项卡,但没有运气。

$(document).on('click', '.nav-link.active', function() {
  var href = $(this).attr('href').substring(1);
  //alert(href);
  $(this).removeClass('active');
  $('.tab-pane[id="' + href + '"]').removeClass('active');
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#home" role="tab">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#profile" role="tab">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#messages" role="tab">Messages</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#settings" role="tab">Settings</a>
  </li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
  <div class="tab-pane" id="home" role="tabpanel">A</div>
  <div class="tab-pane" id="profile" role="tabpanel">B</div>
  <div class="tab-pane" id="messages" role="tabpanel">C</div>
  <div class="tab-pane" id="settings" role="tabpanel">D</div>
</div>

在打开的选项卡上单击导航链接时,输出应关闭选项卡。

【问题讨论】:

  • 问题解决了吧?
  • 仅部分。单击页面上的任何位置都不会关闭它。
  • 嘿,试试我的新答案。希望这会对你有所帮助。

标签: jquery bootstrap-4


【解决方案1】:

如你所说。我想这会对你有所帮助。

$(document).on('click', '.nav-link.active', function() {
  var href = $(this).attr('href').substring(1);
  //alert(href);
  $(this).removeClass('active');
  $('.tab-pane[id="' + href + '"]').removeClass('active');

});
$(document).mouseup(function(e) {
    var container = $("#tablist"); // target ID or class
    // if the target of the click isn't the container nor a descendant of the container
    if (!container.is(e.target) && container.has(e.target).length === 0) {
        // get Event here
        $('.active').removeClass('active');
    }
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist" id="tablist">
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#home" role="tab">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#profile" role="tab">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#messages" role="tab">Messages</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#settings" role="tab">Settings</a>
  </li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
  <div class="tab-pane" id="home" role="tabpanel">A</div>
  <div class="tab-pane" id="profile" role="tabpanel">B</div>
  <div class="tab-pane" id="messages" role="tabpanel">C</div>
  <div class="tab-pane" id="settings" role="tabpanel">D</div>
</div>

【讨论】:

    【解决方案2】:

    在 BS v4 中,有一个 .tab('show') 方法,但没有关闭选项卡,因此您必须手动更新类和属性才能关闭面板。

    您当前的事件侦听器只会在通过点击活动导航项触发事件时触发。这可以帮助关闭当前的导航项,但通常不会响应来自文档的点击。

    您将需要另一个文档级别的侦听器。然后检查您是否单击了不属于导航的某个位置,并执行相同的代码以关闭活动选项卡

    // listen for clicks to active nav
    $(document).on('click', '.nav-link.active', function() {
      hideTab($(this))
    });
    
    // listen for clicks everywhere
    $(document).on('click', function(e) {
      // if clicked on nav, return
      if ($(e.target).closest(".nav-tabs,.tab-content").length) {return}
    
      // otherwise, off clicks should close nav
      hideTab($('.nav-link.active'))
    });
    
    function hideTab($activeNav) {
      // deselect nav item
      $activeNav.removeClass('active').attr('aria-selected', "false")
    
      // identify tab pane & deselect
      $($activeNav.attr("href")).removeClass('active');
    }
    

    堆栈片段中的演示

    // listen for clicks to active nav
    $(document).on('click', '.nav-link.active', function() {
      hideTab($(this))
    });
    
    // listen for clicks everywhere
    $(document).on('click', function(e) {
      // if clicked on nav, return
      if ($(e.target).closest(".nav-tabs,.tab-content").length) {return}
      
      // otherwise, off clicks should close nav
      hideTab($('.nav-link.active'))
    });
    
    function hideTab($activeNav) {
      // deselect nav item
      $activeNav.removeClass('active').attr('aria-selected', "false")
    
      // identify tab pane & deselect
      $($activeNav.attr("href")).removeClass('active');
    }
    body {
     background-color: #fff1d7 !important;
     padding: 15px;
     height: 100vh;
    }
    .tab-content, 
    .nav-tabs {
      background: white;
    }
    .tab-pane {
      padding: 10px;
    }
    h2 {
      margin-top: 3em !important;
    }
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.js"></script>
    
    <!-- Nav tabs -->
    <ul class="nav nav-tabs" role="tablist">
      <li class="nav-item">
        <a class="nav-link" data-toggle="tab" href="#home" role="tab">Home</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-toggle="tab" href="#profile" role="tab">Profile</a>
      </li>
    </ul>
    
    <!-- Tab panes -->
    <div class="tab-content">
      <div class="tab-pane" id="home" role="tabpanel">Home Info</div>
      <div class="tab-pane" id="profile" role="tabpanel">Profile Info</div>
    </div>
    
    <h2>Click Anywhere to Close </h2>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多