开发者问题收集

.push 失败。无需本地存储即可工作

2021-12-26
59

我无法将用户输入推送到本地存储。 当我的 quizData 变量为空数组时,它可以正常工作,

let quizData = JSON.parse(localStorage.getItem('MyQuiz'));

将其改回此值也可以正常工作,因为(我假设)LS 中已经有信息,

let quizData = JSON.parse(localStorage.getItem('MyQuiz'));

但清除 LS 会导致它再次失败。 如能得到任何帮助,我将不胜感激

let quizData = JSON.parse(localStorage.getItem('MyQuiz'));
const addQuiz = (ev) => {
  ev.preventDefault();

  let quizForm = {
    question: document.getElementById('question-input').value,
    a: document.getElementById('a-input').value,
    b: document.getElementById('b-input').value,
    c: document.getElementById('c-input').value,
    d: document.getElementById('d-input').value,
    correct: document.getElementById('correct-input').value,
  };

  quizData.push(quizForm);
  document.forms[0].reset();

  console.warn('added', { quizData });

  localStorage.setItem('MyQuiz', JSON.stringify(quizData));
};
document.addEventListener('DOMContentLoaded', () => {
  document.getElementById('submitForm').addEventListener('click', addQuiz);
  console.log(quizData);
});

错误 custom-questions.js:26

未捕获的 TypeError:无法读取 null 的属性(读取“推送”) 在 HTMLButtonElement.addQuiz

2个回答

如果 localStorage 中没有任何内容,您可以简单地将 quizData 设置为新数组。

let quizData = JSON.parse(localStorage.getItem('MyQuiz')) ?? [];

如果 quizData 在其他地方更新,最好在更新之前检索最新数组。因此,您可以在 addQuiz 中获取最新的 quizData

const addQuiz = (ev) => {
  ev.preventDefault();

  let quizForm = {
    question: document.getElementById('question-input').value,
    a: document.getElementById('a-input').value,
    b: document.getElementById('b-input').value,
    c: document.getElementById('c-input').value,
    d: document.getElementById('d-input').value,
    correct: document.getElementById('correct-input').value,
  };
  
  const quizData = JSON.parse(localStorage.getItem('MyQuiz')) ?? [];

  quizData.push(quizForm);
  document.forms[0].reset();

  console.warn('added', { quizData });

  localStorage.setItem('MyQuiz', JSON.stringify(quizData));
};
Ramesh Reddy
2021-12-26

如果为空或未定义,则应将 quizData 初始化为空数组。

let quizData = JSON.parse(localStorage.getItem('MyQuiz')) || [];
Max G.
2021-12-26