You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jQuery实现页面刷新后保持当前标签页激活状态?

页面刷新后保持激活标签页失效,求排查问题

我尝试实现页面重新加载/刷新后保持当前标签页处于激活状态,但目前无法正常生效。请问我哪里出错了?恳请各位帮忙解答,谢谢。

HTML视图

<!-- Tabs navs -->
<ul class="nav nav-tabs mb-5" id="ex1" role="tablist">
  <li class="nav-item" role="presentation">
    <a class="nav-link active" id="ex1-tab-1" data-mdb-toggle="tab" href="#ex1-tabs-1" role="tab"
      aria-controls="ex1-tabs-1" aria-selected="true">Slots</a>
  </li>
  <li class="nav-item" role="presentation">
    <a class="nav-link " id="ex1-tab-2" data-mdb-toggle="tab" href="#ex1-tabs-2" role="tab"
      aria-controls="ex1-tabs-2" aria-selected="false">Booking List</a>
  </li>
  <li class="nav-item" role="presentation">
    <a class="nav-link" id="ex1-tab-3" data-mdb-toggle="tab" href="#ex1-tabs-3" role="tab"
      aria-controls="ex1-tabs-3" aria-selected="false">Rooms</a>
  </li>
</ul>
<!-- Tabs navs -->


<div class="tab-pane fade active show" id="ex1-tabs-1" role="tabpanel" aria-labelledby="ex1-tab-1">
   Tab one
</div>

<div class="tab-pane fade" id="ex1-tabs-2" role="tabpanel" aria-labelledby="ex1-tab-2">
   Tab Two
</div>

<div class="tab-pane fade" id="ex1-tabs-3" role="tabpanel" aria-labelledby="ex1-tab-3">
   Tab Three
</div>

注:原HTML中第一个tab-pane需添加active show类,才能默认显示对应面板

原脚本

$(document).ready(function(){

  $('a[data-mdb-toggle="tab"]').on('show.bs.tab', function(e) {

      localStorage.setItem('activeTab', $(e.target).attr('href'));
  });
  
  var activeTab = localStorage.getItem('activeTab');
  if(activeTab){
      $('#ex1 a[href="' + activeTab + '"]').tab('show');
  }
});

问题排查与修正

几个可能导致失效的原因及解决办法:

1. MDB组件的事件与方法适配问题

你使用的是MDB(Material Design for Bootstrap)组件,原生Bootstrap的show.bs.tab事件和.tab('show')方法与MDB的实现不兼容。MDB对应标签切换完成的事件是shown.mdb.tab,手动操作类的方式比调用组件方法更可靠。

2. 初始化时机问题

$(document).ready可能在MDB组件完全初始化前执行,改用$(window).on('load')确保所有资源加载完成后再绑定事件和恢复标签状态。

3. 未清理初始激活状态

恢复标签时需要先移除所有导航项和面板的active类,避免多个元素同时处于激活状态。

修正后的脚本

$(window).on('load', function() {
  // 标签切换完成后存储当前标签的href
  $('a[data-mdb-toggle="tab"]').on('shown.mdb.tab', function(e) {
    localStorage.setItem('activeTab', $(e.target).attr('href'));
  });

  // 页面加载时恢复之前激活的标签
  var activeTab = localStorage.getItem('activeTab');
  if (activeTab) {
    // 移除所有导航项的active状态
    $('.nav-link').removeClass('active').attr('aria-selected', 'false');
    // 移除所有面板的active状态
    $('.tab-pane').removeClass('active show');
    
    // 激活目标导航项
    $(`#ex1 a[href="${activeTab}"]`).addClass('active').attr('aria-selected', 'true');
    // 激活目标面板
    $(activeTab).addClass('active show');
  }
});

额外检查

  • 打开浏览器控制台的Application面板,查看localStorage中是否存在activeTab键,确认存储的值是否正确。
  • 确保MDB的JS文件已正确引入,且版本与组件匹配。

内容的提问来源于stack exchange,提问作者zubair syslab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:30:51