如何在页面重载后保持指定Bootstrap标签页处于激活状态?
解决Bootstrap标签页页面重载后保持激活状态的问题
你当前代码里window.location.reload()之后的$('#liProcess-in').addClass('active in')不会执行——页面刷新后当前上下文的JS代码会直接终止,所有未执行的代码都会失效。要实现重载后保持标签页激活,需要先把激活状态存储起来,等页面重新加载后再读取状态并设置。
方案一:使用localStorage存储状态
修改点击事件代码,在刷新前把目标标签页的ID存入本地存储:
$('.btn-save-all').click(function () { $("input[name*='txtid']").each(function () { let id = $(this).attr('name'); id = id.replace('txtid', ''); let dat = $(this).val(); SaveExpectedBookDate(id, dat); }); alert("Success"); // 把要激活的标签页ID存入本地存储 localStorage.setItem('activeTab', 'liProcessin'); window.location.reload(); });
然后在页面加载完成时,读取本地存储并设置标签页激活状态:
$(document).ready(function() { const activeTabId = localStorage.getItem('activeTab'); if (activeTabId === 'liProcessin') { // 移除默认激活标签页的类 $('#myTab li.active').removeClass('active in'); $('#tab_content1').removeClass('active in'); // 激活目标标签页和对应内容面板 $('#liProcessin').addClass('active in'); $('#tab_content2').addClass('active in'); // 更新标签页的aria属性以符合Bootstrap规范 $('#home-tab').attr('aria-expanded', 'false'); $('#profile-tab').attr('aria-expanded', 'true'); } });
方案二:使用URL参数传递状态
如果不想依赖本地存储,可以在刷新时给URL添加参数,页面加载时读取参数来设置状态:
修改点击事件代码:
$('.btn-save-all').click(function () { $("input[name*='txtid']").each(function () { let id = $(this).attr('name'); id = id.replace('txtid', ''); let dat = $(this).val(); SaveExpectedBookDate(id, dat); }); alert("Success"); // 跳转到当前页面并携带tab参数 window.location.href = `${window.location.pathname}?tab=liProcessin`; });
页面加载时读取URL参数并设置状态:
$(document).ready(function() { const urlParams = new URLSearchParams(window.location.search); const activeTab = urlParams.get('tab'); if (activeTab === 'liProcessin') { // 移除默认激活类 $('#myTab li.active').removeClass('active in'); $('#tab_content1').removeClass('active in'); // 激活目标标签页和对应内容 $('#liProcessin').addClass('active in'); $('#tab_content2').addClass('active in'); // 更新aria属性 $('#home-tab').attr('aria-expanded', 'false'); $('#profile-tab').attr('aria-expanded', 'true'); } });
注意:Bootstrap标签页需要同时处理标签项(<li>)和对应的内容面板(tab_content),只设置<li>的类无法完成完整的标签切换,必须同步更新内容面板的状态。
内容的提问来源于stack exchange,提问作者JL_Coder
相关产品推荐
相关产品推荐

