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

点击链接后如何保持菜单展开状态?页面重载菜单自动收回问题求解

问题根因

菜单的展开状态仅保存在当前页面的运行时内存中,点击子链接触发页面重载后,所有运行时状态都会被重置,菜单自然恢复为默认收起状态。

解决方案1:URL路径匹配(更推荐)

页面加载后自动读取当前访问的URL,判断是否属于该菜单下的子页面,如果是就主动把菜单设为展开状态,即使用户直接访问子页面链接也能正确展开对应菜单。
修改后的完整JS代码如下:

function setChecked(check_id) {
    event.preventDefault();
    let checkbox = document.getElementById(check_id);
    checkbox.checked = !checkbox.checked;
}

function showSection(check_id, section_id) {
    let checkbox = document.getElementById(check_id)
    let section = document.getElementById(section_id);
    if (checkbox.checked) {
        section.style.opacity = 1;
        section.style.display = 'block';
    } else {
        section.style.opacity = 0;
        section.style.display = 'none';
    }
}

// 新增页面加载初始化逻辑
window.addEventListener('DOMContentLoaded', function() {
    const currentUrl = window.location.href;
    // 判断当前页面是否是该菜单下的子页面
    if (currentUrl.includes('link-item1') || currentUrl.includes('link-item2')) {
        const menuCheckbox = document.getElementById('isexpanded3');
        if (menuCheckbox) {
            menuCheckbox.checked = true;
            showSection('isexpanded3', 'itens-options-list');
        }
    }
})

解决方案2:sessionStorage持久化

每次切换菜单状态时将展开/收起状态存在浏览器本地存储中,页面加载时读取存储的状态恢复菜单显示,仅在当前标签页生效,关闭标签页后状态自动清除。
修改后的完整JS代码如下:

function setChecked(check_id) {
    event.preventDefault();
    let checkbox = document.getElementById(check_id);
    checkbox.checked = !checkbox.checked;
    // 存储菜单状态
    sessionStorage.setItem('menu_' + check_id, checkbox.checked ? '1' : '0');
}

function showSection(check_id, section_id) {
    let checkbox = document.getElementById(check_id)
    let section = document.getElementById(section_id);
    if (checkbox.checked) {
        section.style.opacity = 1;
        section.style.display = 'block';
    } else {
        section.style.opacity = 0;
        section.style.display = 'none';
    }
}

// 新增页面加载初始化逻辑
window.addEventListener('DOMContentLoaded', function() {
    const menuCheckbox = document.getElementById('isexpanded3');
    if (menuCheckbox && sessionStorage.getItem('menu_isexpanded3') === '1') {
        menuCheckbox.checked = true;
        showSection('isexpanded3', 'itens-options-list');
    }
})

额外优化提示

现有代码中<a href="" onclick="setChecked('isexpanded3')">items</a>的href属性为空,点击会触发当前页面重载,建议改为href="javascript:void(0)"避免不必要的刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:39:03