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

如何将表单值存入LocalStorage并在页面刷新后保持UI展示?

解决页面刷新后LocalStorage学生数据丢失的问题

当前实现中,新增学生后UI能正常显示数据,且数据已存入LocalStorage,但页面刷新后UI中的学生数据会消失。需要补充初始化加载逻辑,从LocalStorage读取数据并渲染到UI。

现有HTML代码

<main>
  <div class="container">

    <h1>student's info</h1>

    <form class="input-form">
      <input type="text"class="full-name" name="name" placeholder="Enter Full Name">
      <input type="number"class="age" name="name" placeholder="Age">
      <input type="text" class = "gender"name="name" placeholder="gender">
      <button class="submit-btn" type="submit">submit</button>
    </form>
  </div>

  <div class="con"> 
    <div class="student">
    </div>
  </div>
</main>

现有JavaScript代码

// GLOBAL VARIABLES
var submitBtn, student, fullName, age, gender;

submitBtn = document.querySelector('.submit-btn');
student = document.querySelector('.student');
fullName = document.querySelector('.full-name');
age = document.querySelector('.age');
gender = document.querySelector('.gender');

var arr = [];

// EVENTLISTENERS
submitBtn.addEventListener('click', addStudent);

// FUNCTIONS
function addStudent(e) {
  e.preventDefault();

  let div = document.createElement('div');
  div.classList.add('student-box');

  let nameSpan = document.createElement('span');
  nameSpan.classList.add('student-name');
  nameSpan.innerText = fullName.value;

  let ageSpan = document.createElement('span');
  ageSpan.classList.add('student-age');
  ageSpan.innerText = age.value;

  let genderSpan = document.createElement('span');
  genderSpan.classList.add('student-gender');
  genderSpan.innerText = gender.value;

  saveToLocal();

  div.append(nameSpan, ageSpan, genderSpan);

  student.appendChild(div);

  fullName.value = '';
  age.value = '';
  gender.value = '';
}

function saveToLocal() {
  getData();

  arr.push({
    name: fullName.value,
    ages: age.value,
    genders: gender.value,
  });
  localStorage.setItem('student', JSON.stringify(arr));
}

function getData() {
  if (localStorage.getItem('student') !== null) {

    JSON.parse(localStorage.getItem('student'));

    //localStorage.setItem('student', JSON.stringify(arr));
    //var dis = JSON.Parse(localStorage.getItem('student'));
    //student.appendChild();
    //arr = JSON.parse();
    //console.log(arr);

  }/* else {

  }*/
}

修复步骤

  1. 修正getData函数:将LocalStorage中解析出的数据赋值给全局数组arr,确保新增数据时不会覆盖原有数据:
function getData() {
  if (localStorage.getItem('student') !== null) {
    arr = JSON.parse(localStorage.getItem('student'));
  } else {
    arr = [];
  }
}
  1. 添加渲染函数:遍历arr中的学生数据,创建DOM元素并添加到UI中:
function renderStudents() {
  // 先清空现有内容,避免重复渲染
  student.innerHTML = '';
  
  arr.forEach(studentItem => {
    let div = document.createElement('div');
    div.classList.add('student-box');

    let nameSpan = document.createElement('span');
    nameSpan.classList.add('student-name');
    nameSpan.innerText = studentItem.name;

    let ageSpan = document.createElement('span');
    ageSpan.classList.add('student-age');
    ageSpan.innerText = studentItem.ages;

    let genderSpan = document.createElement('span');
    genderSpan.classList.add('student-gender');
    genderSpan.innerText = studentItem.genders;

    div.append(nameSpan, ageSpan, genderSpan);
    student.appendChild(div);
  });
}
  1. 页面初始化时加载并渲染数据:在DOM加载完成后,调用getData和renderStudents函数,从LocalStorage读取数据并展示:
// 页面加载完成后初始化数据
document.addEventListener('DOMContentLoaded', () => {
  getData();
  renderStudents();
});

修改后的完整JavaScript代码

// GLOBAL VARIABLES
var submitBtn, student, fullName, age, gender;

submitBtn = document.querySelector('.submit-btn');
student = document.querySelector('.student');
fullName = document.querySelector('.full-name');
age = document.querySelector('.age');
gender = document.querySelector('.gender');

var arr = [];

// EVENTLISTENERS
submitBtn.addEventListener('click', addStudent);

// 页面加载完成后初始化数据
document.addEventListener('DOMContentLoaded', () => {
  getData();
  renderStudents();
});

// FUNCTIONS
function addStudent(e) {
  e.preventDefault();

  // 验证输入不为空
  if (!fullName.value || !age.value || !gender.value) return;

  let div = document.createElement('div');
  div.classList.add('student-box');

  let nameSpan = document.createElement('span');
  nameSpan.classList.add('student-name');
  nameSpan.innerText = fullName.value;

  let ageSpan = document.createElement('span');
  ageSpan.classList.add('student-age');
  ageSpan.innerText = age.value;

  let genderSpan = document.createElement('span');
  genderSpan.classList.add('student-gender');
  genderSpan.innerText = gender.value;

  saveToLocal();

  div.append(nameSpan, ageSpan, genderSpan);
  student.appendChild(div);

  // 清空输入框
  fullName.value = '';
  age.value = '';
  gender.value = '';
}

function saveToLocal() {
  getData();

  arr.push({
    name: fullName.value,
    ages: age.value,
    genders: gender.value,
  });
  localStorage.setItem('student', JSON.stringify(arr));
}

function getData() {
  if (localStorage.getItem('student') !== null) {
    arr = JSON.parse(localStorage.getItem('student'));
  } else {
    arr = [];
  }
}

function renderStudents() {
  student.innerHTML = '';
  
  arr.forEach(studentItem => {
    let div = document.createElement('div');
    div.classList.add('student-box');

    let nameSpan = document.createElement('span');
    nameSpan.classList.add('student-name');
    nameSpan.innerText = studentItem.name;

    let ageSpan = document.createElement('span');
    ageSpan.classList.add('student-age');
    ageSpan.innerText = studentItem.ages;

    let genderSpan = document.createElement('span');
    genderSpan.classList.add('student-gender');
    genderSpan.innerText = studentItem.genders;

    div.append(nameSpan, ageSpan, genderSpan);
    student.appendChild(div);
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:55:18