【发布时间】:2016-02-21 07:31:04
【问题描述】:
我正在处理 TODO 列表,我正在尝试使用本地存储来完成这项工作。 但是我的代码中有一个问题我无法解决。
函数getTaskArray() 从键“tasks”下的本地存储中检索到数组。如果找不到它,它会创建一个新数组。
pushData() 函数应该将任务对象推入数组。但我收到以下错误:taskArray.push is not a function。
我在下面附上了我的代码的 sn-p。
提前感谢您的帮助!
var taskArray;
function getTaskArray() {
var taskArrayString = localStorage.getItem("tasks");
if (taskArrayString !== null && typeof taskArrayString === "string") {
taskArray = taskArrayString;
console.log("Succesfully retrieved 'tasks' and contents.");
} else {
console.log("Succesfully retrieved 'tasks', contents were not a string or held no contents. Contents of 'tasks' reset to empty array");
var emptyArray = JSON.stringify(new Array());
localStorage.setItem("tasks", emptyArray);
taskArray = localStorage.getItem("tasks");
};
};
var taskString;
function pushData() {
taskString = JSON.stringify(taskObject);
taskArray = taskArray.push(taskString);
};
更新:
我的代码的完整版本:
// All functions
var taskFromHtml;
var priorityFromHtml;
function getTaskInput() {
try {
taskFromHtml = $("#taak").val();
priorityFromHtml = $("#prioriteit").val();
console.log("Succesfully retrieved data. Task: " + taskFromHtml + ". Priority: " + priorityFromHtml + ".");
} catch(e) {
console.log("Failed to retrieve data, unexpecter error.");
};
};
var taskObject;
function taskToObject() {
taskObject = {
task: taskFromHtml,
priority: priorityFromHtml,
finished: false
};
};
var taskArray;
function getTaskArray() {
var taskArrayString = localStorage.getItem("tasks");
if (taskArrayString !== null && typeof taskArrayString === "string") {
taskArray = JSON.parse(taskArrayString); // <------
console.log("Succesfully retrieved 'tasks' and contents.");
} else {
console.log("Succesfully retrieved 'tasks', contents were not a string or held no contents. Contents of 'tasks' reset to empty array");
var emptyArray = JSON.stringify(new Array());
localStorage.setItem("tasks", emptyArray);
taskArray = localStorage.getItem("tasks");
taskArray = JSON.parse(taskArray); // <------
};
};
var taskString;
function pushData() {
taskString = JSON.stringify(taskObject);
taskArray = taskArray.push(taskString);
};
它是 HTML:
<form id="todoInsert" action="#">
<input type="text" name="task" id="taak">
<select id="prioriteit">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<input type="submit" id="formSubmit">
</form>
<div id="addItem">+</div>
【问题讨论】:
-
taskObject定义在哪里? -
@BasvanStein 代码有点远,还没有开始调试。但是上面的sn-p中有一行代码:localStorage.setItem("tasks", []);
-
@DemiënDrost 好的,请务必在设置 localStorage 时也执行 JSON.stringify,请参阅我为您的固定代码更新的答案。
-
@hindmost var taskObject;函数 taskToObject() { taskObject = { 任务:taskFromHtml,优先级:priorityFromHtml,完成:false }; };
标签: javascript html arrays json local-storage