濐颩 2024-07-20 17:43 采纳率: 14.3%
浏览 6
已结题

JavaScript问题

为什么我这个LocalStorage数据无法正常显示?

index.html

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="utf-8">
        <title>执勤队录入</title>
    </head>
    <body>
        <h1>执勤队录入</h1>
        <a href="files\jiaru.html">
            <button>加入执勤队</button>
        </a>
        <br>
        <a href="files\shixi.html">
            <button>新增实习</button>
        </a>
        <br>
        <a href="files\zhuangzheng.html">
            <button>新增转正</button>
        </a>
        <br>
        <a href="files\tichu.html">
            <button>踢出队员</button>
        </a>
        <br>
        <a href="files\chakan.html">
            <button>查看队员</button>
        </a>
    </body>
</html>

jiaru.html

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>加入执勤队</title>
    </head>
    <body>
        <h1>加入执勤队</h1>
        <h2>请填写以下信息</h2>
        班级:<input type="text" placeholder="请填写班级" id="jiaru_class">
        姓名:<input type="text" placeholder="请填写姓名" id="jiaru_name">
        <br>
        <script src="index.js"></script>
        <input type="submit" onclick="JiaRu()">
        <br>
        <a href="javascript:history.back(-1)">
            <button>返回</button>           <!--返回键-->
        </a>
        
    </body>
</html>

shixi.html

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>新增实习</title>
    </head>
    <body>
        <h1>新增实习</h1>
        <h2>请填写以下信息</h2>
        实习队员班级:<input type="text" id="shixi_duiyuan_class" placeholder="请输入实习班级">
        实习队员姓名:<input type="text" id="shixi_duiyuan_name" placeholder="请输入实习姓名">
        <br>
        导师班级:<input type="text" id="shixi_daoshi_class" placeholder="请输入导师班级">
        导师姓名:<input type="text" id="shixi_daoshi_name" placeholder="请输入导师姓名">
        <br>
        <script src="index.js"></script>
        <input type="submit" onclick="ShiXi()">
        <br>
        <a href="javascript:history.back(-1)">
            <button>返回</button>           <!--返回键-->
        </a>
    </body>
</html>

zhuangzheng.html

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>新增转正</title>
    </head>
    <body>
        <h1>新增转正</h1>
        <h2>请输入以下信息</h2>
        导师班级:<input type="text" placeholder="请输入导师班级" id="zhuangzheng_daoshi_class">
        <br>
        导师姓名:<input type="text" placeholder="请输入导师姓名" id="zhuangzheng_daoshi_name">
        <br>
        实习班级:<input type="text" placeholder="请输入实习班级" id="zhuangzheng_shixi_class">
        <br>
        实习姓名:<input type="text" placeholder="请输入实习姓名" id="zhuangzheng_shixi_name">
        <br>
        <script src="index.js"></script>
        <input type="submit" onclick="ZhuangZheng()">
        <br>
        <a href="javascript:history.back(-1)">
            <button>返回</button>           <!--返回键-->
        </a>
    </body>
</html>

tichu.html

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>踢出队员</title>
    </head>
    <body>
        <h1>踢出队员</h1>
        <h2>请输入以下信息</h2>
        班级:<input type="text" placeholder="请填写班级" id="tichu_class">
        姓名:<input type="text" placeholder="请填写姓名" id="tichu_name">
        <br>
        <script src="index.js"></script>
        <input type="submit" onclick="TiChu()">
        <br>
        <a href="javascript:history.back(-1)">
            <button>返回</button>           <!--返回键-->
        </a>
    </body>
</html>

index.js

/*
JavaScript函数
*/

//加入执勤队
var dates = [];

if(localStorage.getItem("data")){ 
    dates = JSON.parse(localStorage.getItem("data")); // 把json数据转为js对象
    
}else{
    localStorage.setItem("data",JSON.stringify(dates));
}
function JiaRu()
{
    dates.push({
        class:jiaru_class,
        name:jiaru_name,
        state:"未实习",
        daoshi_class:null,
        daoshi_name:null
    });
    jiaru_class = null;
    jiaru_name = null;
    localStorage.data = JSON.stringify(dates);
    alert('加入成功!');
}

//添加实习
function ShiXi()
{
    index = dates.indexOf({
        class:shixi_duiyuan_class,
        name:shixi_duiyuan_name,
        state:"未实习",
        daoshi_class:null,
        daoshi_name:null
    })
    dates[index] = {
        class:shixi_duiyuan_class,
        name:shixi_duiyuan_name,
        state:"未转正",
        daoshi_class:shixi_daoshi_class,
        daoshi_name:shixi_daoshi_name
    }
    shixi_daoshi_class = null;
    shixi_daoshi_name = null;
    shixi_duiyuan_class = null;
    shixi_duiyuan_name = null;
    localStorage.data = JSON.stringify(dates);
    alert('修改成功!');
}

//转正队员
function ZhuangZheng()
{
    index = dates.indexOf({
        class:zhuangzheng_duiyuan_class,
        name:zhuangzheng_daoshi_name,
        state:"未转正",
        daoshi_class:zhuangzheng_daoshi_class,
        daoshi_name:zhuangzheng_daoshi_name
    })
    dates[index] = {
        class:zhuangzheng_duiyuan_class,
        name:zhuangzheng_daoshi_name,
        state:"已转正",
        daoshi_class:null,
        daoshi_name:null
    }
    zhuangzheng_daoshi_class = null;
    zhuangzheng_daoshi_name = null;
    zhuangzheng_duiyuan_class = null;
    zhuangzheng_duiyuan_name = null;
    localStorage.data = JSON.stringify(dates);
    alert('修改成功!');
}

//踢出队员
function TiChu()
{
    index = dates.indexOf({
        class:tichu_class,
        name:tichu_name,
        state:"已转正",
        daoshi_class:null,
        daoshi_name:null
    })
    dates.splice(index);
    tichu_class = null;
    tichu_name = null
    localStorage.data = JSON.stringify(dates);
}

//查看队员
function ChaKan(){
    var str = "";
    dates.forEach(function(item){// 遍历学生数据数组,每一个学生的数据都要生成一个tr行
        str +="<tr><td>"+item.class+"</td><td>"+item.name+"</td><td>"+item.state+"</td><td>"+item.daoshi_class+"</td><td>",item.daoshi_name,"</td></tr>"
    });
    tbody.innerHTML = str; // 把tr渲染到tbody元素。
    }
/*
JavaScript变量
*/

//jiaru.html
var jiaru_class = JSON.parse(document.getElementById('jiaru_class').textContent);
var jiaru_name = JSON.parse(document.getElementById('jiaru_name').textContent);

//shixi.html
var shixi_duiyuan_class = JSON.parse(document.getElementById('shixi_duiyuan_class').textContent);
var shixi_duiyuan_name = JSON.parse(document.getElementById('shixi_duiyuan_name').textContent);
var shixi_daoshi_class = JSON.parse(document.getElementById('shixi_daoshi_class').textContent);
var shixi_daoshi_name = JSON.parse(document.getElementById('shixi_daoshi_name').textContent);

//zhuangzheng.html
var zhuangzheng_daoshi_class = JSON.parse(document.getElementById('zhuangzheng_daoshi_class').textContent);
var zhuangzheng_daoshi_name = JSON.parse(document.getElementById('zhuangzheng_daoshi_name').textContent);
var zhuangzheng_duiyuan_class = JSON.parse(document.getElementById('zhuangzheng_duiyuan_class').textContent);
var zhuangzheng_duiyuan_name = JSON.parse(document.getElementById('zhuangzheng_duiyuan_name').textContent);

//tichu.html
var tichu_class = JSON.parse(document.getElementById('tichu_class').textContent);
var tichu_name = JSON.parse(document.getElementById('tichu_name').textContent);

问题图片

img


工作目录

index.html
files
  ┌ jiaru.html
  ├ shixi.html
  ├ zhuangzheng.html
  ├ tichu.html
  ├ chakan.html
  └ index.js

望解答!谢谢!

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-07-20 18:37
    关注

    该回答引用自GPT-3.5, 由博主 GISer Liu 编写:

    问题分析

    根据您提供的代码和描述,问题出在 LocalStorage 数据无法正常显示。具体分析如下:

    1. HTML 文件结构:您有多个 HTML 文件,每个文件都包含表单和按钮,用于输入和提交数据。
    2. JavaScript 文件index.js 文件中定义了多个函数来处理数据的存储和显示。
    3. LocalStorage 操作:代码中使用了 LocalStorage 来存储和读取数据,但存在一些问题。

    关键问题点

    1. 变量获取方式:在 index.js 中,变量 jiaru_classjiaru_name 等是通过 JSON.parse 从 DOM 元素的 textContent 中获取的,这种方式不正确。
    2. 数据查找和更新:在 ShiXiZhuangZhengTiChu 函数中,使用 indexOf 查找数据时,对象比较方式不正确。
    3. 数据展示ChaKan 函数中,数据展示的 HTML 拼接存在问题。

    解决方案

    1. 修正变量获取方式

    变量应该直接从输入框中获取值,而不是通过 JSON.parsetextContent 中获取。

    // jiaru.html
    var jiaru_class = document.getElementById('jiaru_class').value;
    var jiaru_name = document.getElementById('jiaru_name').value;
    
    // shixi.html
    var shixi_duiyuan_class = document.getElementById('shixi_duiyuan_class').value;
    var shixi_duiyuan_name = document.getElementById('shixi_duiyuan_name').value;
    var shixi_daoshi_class = document.getElementById('shixi_daoshi_class').value;
    var shixi_daoshi_name = document.getElementById('shixi_daoshi_name').value;
    
    // zhuangzheng.html
    var zhuangzheng_daoshi_class = document.getElementById('zhuangzheng_daoshi_class').value;
    var zhuangzheng_daoshi_name = document.getElementById('zhuangzheng_daoshi_name').value;
    var zhuangzheng_duiyuan_class = document.getElementById('zhuangzheng_duiyuan_class').value;
    var zhuangzheng_duiyuan_name = document.getElementById('zhuangzheng_duiyuan_name').value;
    
    // tichu.html
    var tichu_class = document.getElementById('tichu_class').value;
    var tichu_name = document.getElementById('tichu_name').value;
    

    2. 修正数据查找和更新

    使用 findIndex 方法来查找对象,并确保对象比较方式正确。

    // 添加实习
    function ShiXi() {
        var index = dates.findIndex(item => 
            item.class === shixi_duiyuan_class && 
            item.name === shixi_duiyuan_name && 
            item.state === "未实习"
        );
        if (index !== -1) {
            dates[index] = {
                class: shixi_duiyuan_class,
                name: shixi_duiyuan_name,
                state: "未转正",
                daoshi_class: shixi_daoshi_class,
                daoshi_name: shixi_daoshi_name
            };
            localStorage.data = JSON.stringify(dates);
            alert('修改成功!');
        } else {
            alert('未找到对应记录!');
        }
    }
    
    // 转正队员
    function ZhuangZheng() {
        var index = dates.findIndex(item => 
            item.class === zhuangzheng_duiyuan_class && 
            item.name === zhuangzheng_duiyuan_name && 
            item.state === "未转正"
        );
        if (index !== -1) {
            dates[index] = {
                class: zhuangzheng_duiyuan_class,
                name: zhuangzheng_duiyuan_name,
                state: "已转正",
                daoshi_class: null,
                daoshi_name: null
            };
            localStorage.data = JSON.stringify(dates);
            alert('修改成功!');
        } else {
            alert('未找到对应记录!');
        }
    }
    
    // 踢出队员
    function TiChu() {
        var index = dates.findIndex(item => 
            item.class === tichu_class && 
            item.name === tichu_name
        );
        if (index !== -1) {
            dates.splice(index, 1);
            localStorage.data = JSON.stringify(dates);
            alert('删除成功!');
        } else {
            alert('未找到对应记录!');
        }
    }
    

    3. 修正数据展示

    修正 ChaKan 函数中的 HTML 拼接问题。

    // 查看队员
    function ChaKan() {
        var str = "";
        dates.forEach(function(item) {
            str += "<tr><td>" + item.class + "</td><td>" + item.name + "</td><td>" + item.state + "</td><td>" + item.daoshi_class + "</td><td>" + item.daoshi_name + "</td></tr>";
        });
        document.getElementById('tbody').innerHTML = str; // 假设有一个 id 为 tbody 的元素
    }
    

    完整代码示例

    index.js 修正后的完整代码

    /*
    JavaScript函数
    */
    
    // 加入执勤队
    var dates = [];
    
    if (localStorage.getItem("data")) { 
        dates = JSON.parse(localStorage.getItem("data")); // 把json数据转为js对象
    } else {
        localStorage.setItem("data", JSON.stringify(dates));
    }
    
    function JiaRu() {
        var jiaru_class = document.getElementById('jiaru_class').value;
        var jiaru_name = document.getElementById('jiaru_name').value;
        dates.push({
            class: jiaru_class,
            name: jiaru_name,
            state: "未实习",
            daoshi_class: null,
            daoshi_name: null
        });
        localStorage.data = JSON.stringify(dates);
        alert('加入成功!');
    }
    
    // 添加实习
    function ShiXi() {
        var shixi_duiyuan_class = document.getElementById('shixi_duiyuan_class').value;
        var shixi_duiyuan_name = document.getElementById('shixi_duiyuan_name').value;
        var shixi_daoshi_class = document.getElementById('shixi_daoshi_class').value;
        var shixi_daoshi_name = document.getElementById('shixi_daoshi_name').value;
        var index = dates.findIndex(item => 
            item.class === shixi_duiyuan_class && 
            item.name === shixi_duiyuan_name && 
            item.state === "未实习"
        );
        if (index !== -1) {
            dates[index] = {
                class: shixi_duiyuan_class,
                name: shixi_duiyuan_name,
                state: "未转正",
                daoshi_class: shixi_daoshi_class,
                daoshi_name: shixi_daoshi_name
            };
            localStorage.data = JSON.stringify(dates);
            alert('修改成功!');
        } else {
            alert('未找到对应记录!');
        }
    }
    
    // 转正队员
    function ZhuangZheng() {
        var zhuangzheng_daoshi_class = document.getElementById('zhuangzheng_daoshi_class').value;
        var zhuangzheng_daoshi_name = document.getElementById('zhuangzheng_daoshi_name').value;
        var zhuangzheng_duiyuan_class = document.getElementById('zhuangzheng_duiyuan_class').value;
        var zhuangzheng_duiyuan_name = document.getElementById('zhuangzheng_duiyuan_name').value;
        var index = dates.findIndex(item => 
            item.class === zhuangzheng_duiyuan_class && 
            item.name === zhuangzheng_duiyuan_name && 
            item.state === "未转正"
        );
        if (index !== -1) {
            dates[index] = {
                class: zhuangzheng_duiyuan_class,
                name: zhuangzheng_duiyuan_name,
                state: "已转正",
                daoshi_class: null,
                daoshi_name: null
            };
            localStorage.data = JSON.stringify(dates);
            alert('修改成功!');
        } else {
            alert('未找到对应记录!');
        }
    }
    
    // 踢出队员
    function TiChu() {
        var tichu_class = document.getElementById('tichu_class').value;
        var tichu_name = document.getElementById('tichu_name').value;
        var index = dates.findIndex(item => 
            item.class === tichu_class && 
            item.name === tichu_name
        );
        if (index !== -1) {
            dates.splice(index, 1);
            localStorage.data = JSON.stringify(dates);
            alert('删除成功!');
        } else {
            alert('未找到对应记录!');
        }
    }
    
    // 查看队员
    function ChaKan() {
        var str = "";
        dates.forEach(function(item) {
            str += "<tr><td>" + item.class + "</td><td>" + item.name + "</td><td>" + item.state + "</td><td>" + item.daoshi_class + "</td><td>" + item.daoshi_name + "</td></tr>";
        });
        document.getElementById('tbody').innerHTML = str; // 假设有一个 id 为 tbody 的元素
    }
    

    总结

    通过上述修改,您应该能够解决 LocalStorage 数据无法正常显示的问题。主要修正了变量获取方式、数据查找和更新逻辑,以及数据展示的 HTML 拼接问题。希望这些修改能帮助您解决问题。如果有任何疑问,请随时提问。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月21日
  • 已采纳回答 7月21日
  • 创建了问题 7月20日