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

Vanilla JS切换表格/图表时localStorage.getItem返回null求助

问题:表格与图表切换时localStorage状态无法读取,返回null

我正在做表格和图表的切换功能,写了几个函数用localStorage保存用户切换后的状态,但用console.log(localStorage.getItem('dataViewType'))输出时返回null,请问哪里漏了?我的原生JS代码如下:

const data = document.querySelectorAll("button.data");
const dataTable = document.querySelector(".dataTable");
const dataGraph = document.querySelector(".dataGraph");

const ViewdataGraph = () => {
    dataTable.style.display = "none";
    dataGraph.style.display = "block";
    data.forEach(
        (element) => (element.innerText = "View data Table"));
   localStorage.setItem("dataViewType", "Graph");

}

const ViewdataTable = () => {
    dataGraph.style.display = "none";
    dataTable.style.display = "block";
    data.forEach(
        (element) => (element.innerText = "View data Graph"));
   localStorage.setItem("dataViewType", "table");

}

const Toggledata = () => {
    const dataType = localStorage.getItem("dataViewType");

    if (dataType) {
        if (dataType === "table") {
            ViewdataTable();

        } else if (dataType === "Graph") {
            ViewdataGraph();

        }
    }
};




window.addEventListener("DOMContentLoaded", (event) => {

    const data = document.querySelectorAll("button.data");
    data.forEach((element) =>
        element.addEventListener("click", (event) => ToggleData()),
    );
}
问题排查与修复

1. 函数名大小写不匹配(核心问题)

JS是大小写敏感语言,你定义的切换函数是Toggledata(小写d),但点击事件里调用的是ToggleData(大写D),导致点击按钮时根本没触发对应函数,自然不会往localStorage写入任何值,所以getItem返回null。

2. 页面加载时未恢复保存的状态

即使修复了函数名,页面刷新后也不会自动读取localStorage的状态,需要在DOMContentLoaded事件里主动调用一次Toggledata(),恢复用户上次的选择。

3. 重复声明变量(非致命但需优化)

DOMContentLoaded回调里重复声明了data变量,和全局的data重复,虽然不报错,但没必要,直接复用全局变量即可。

修复后的代码
const data = document.querySelectorAll("button.data");
const dataTable = document.querySelector(".dataTable");
const dataGraph = document.querySelector(".dataGraph");

const ViewdataGraph = () => {
    dataTable.style.display = "none";
    dataGraph.style.display = "block";
    data.forEach(element => element.innerText = "View data Table");
    localStorage.setItem("dataViewType", "Graph");
}

const ViewdataTable = () => {
    dataGraph.style.display = "none";
    dataTable.style.display = "block";
    data.forEach(element => element.innerText = "View data Graph");
    localStorage.setItem("dataViewType", "table");
}

const Toggledata = () => {
    const dataType = localStorage.getItem("dataViewType");
    // 无保存状态时默认显示表格,可根据需求调整
    if (!dataType) {
        ViewdataTable();
        return;
    }
    dataType === "table" ? ViewdataTable() : ViewdataGraph();
};

window.addEventListener("DOMContentLoaded", (event) => {
    // 页面加载时恢复保存的状态
    Toggledata();
    // 绑定点击事件,确保函数名大小写一致
    data.forEach(element =>
        element.addEventListener("click", Toggledata)
    );
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:18:28