你好,我目前有一个脚本,其中我将一些数据添加到表中,然后输入文本并按下添加按钮,这会将该表中的所有单元格保存为您在taskName输入框中键入的内容。
它被设置为本地存储,并在另一个HTML页面上的一个选择器和创建它的HTML页面上的一个选择器中弹出。
脚本运行良好,我能够根据所选的单元格调用单元格。唯一的问题是我不能删除任务。我希望能够在HTML选择器中选择任务,然后将所有单元格附加到HTML页面中,以便我可以删除所有单元格,在我删除后,它会从localStorage中删除任务,换句话说就是完全删除它。以下是我的HTML代码:
<div id="taskContainer">
<table id="items-table">
<!--<caption>Task</caption>-->
<tr>
<th>Item</th>
<th>Size</th>
<th colspan="3">Options</th>
</table>
</div>
<label for="loadTask">Load Task:</label>
<label for="taskName">Task Name:</label>
<select id="loadTask">
<option></option>
</select>
<input type="text" id="taskName"></input>
<button type="submit" id="addTask">Add</button>
这是我的JS代码:
$(function() {
loadAllTasks();
$("#addTask").click(function() {
let cells = Array.prototype.map.call(document.getElementById("items-table").rows, row => {
return Array.prototype.map.call(row.cells, cell => cell.innerHTML);
});
// create task object from cells
var task = { cells: cells };
// set name property of the task
task.Name = $("#taskName").val();
// call save method using the new task object
saveTaskInStorage(task);
});
});
function saveTaskInStorage(task) {
// Get stored object from localStorage
var savedTasks = JSON.parse(localStorage.getItem('tasks'));
// To be sure that object exists on localStorage
if (!savedTasks || typeof (savedTasks) !== "object")
savedTasks = {};
// Set the new or exists task by the task name on savedTasks object
savedTasks[task.Name] = task;
// Stringify the savedTasks and store in localStorage
localStorage.setItem('tasks', JSON.stringify(savedTasks));
alert("Task has been Added");
}
function loadAllTasks() {
// Get all saved tasks from storage and parse json string to javascript object
var savedTasks = JSON.parse(localStorage.getItem('tasks'));
// To be sure that object exists on localStorage
if (!savedTasks || typeof (savedTasks) !== "object")
return;
// Get all property name of savedTasks object (here it means task names)
for (var taskName in savedTasks){
$("#loadTask").append('<option>' + taskName + '</option>')
}
}
function loadTaskFromStorage1(taskName) {
var savedTasks = JSON.parse(localStorage.getItem('tasks'));
// Return the task by its name (property name on savedTasks object)
return savedTasks[taskName];
}
var tasky = loadTaskFromStorage1($("#loadTask").val());
$("#items-table").append(tasky.cells);
if ((tasky.cells) = "") {
delete savedTask[taskName]
}
正如你在底部所看到的,我试图做我想做的事情,但它没有起作用。我更改了任务(y)和loadTaskFromStorage(1),因为我已经在另一个HTML页面中调用了这些函数作为(task =)和(loadTaskFromStorage),它们运行得非常好。
当我尝试运行底部脚本时,它无法识别任务,并说它未定义。我无法在设置localStorage的同一文件中调用localStorage吗?或者还有其他我错过的东西。
我有HTML代码和JS,我错过了它的输入,当我按按钮时,它会将val()添加到表格中。
我希望能够轻松地创建和删除任务。
更新:
我将loadTasksFrom Storage函数添加到创建任务的函数之外,然后我制作了一个测试按钮来查看是否有效:
$(function() {
$("#test-add").click(function() {
var task = loadTaskFromStorage1($("#loadTask").val());
$("#items-table").append(task.cells);
})
})
当我运行时,出现了这个错误: html.replace不是一个函数 指向了这一行: $("#items-table").append(task.cells); 但当我将此行更改为: alert(task.cells); 我成功地让它警告任务中的单元格,这从未发生过,所以这是巨大的进步!
我现在需要解决的唯一问题是:
1.如何将其追加到表格中 2.只需更改select即可将任务添加到表格中(无需点击按钮) 3.能够完全从所有选择中删除任务,当使用每个任务添加的小删除按钮删除它时。
另外一个更新:
我能够追加task.cells [1] [0]之类的东西,但我不能只做task.cells,我也不想附加“”,那么我该如何逐行附加每个表行中添加的每个X按钮的内容?
.append(task.cells[1][0], task.cells[1][1], task.cells[1][2] etc...
上述代码仅在每个单元格旁边添加了八个,而没有添加到特定表头下的单元格中。我该怎么做呢?
非常感谢您抽出时间来帮助我。
if ((tasky.cells) = "")
不正确。你应该使用逻辑比较符号:if ((tasky.cells) == "")
。 - Twistytasky.cells
是一个数组,你将无法将数组与字符串值进行比较。该数组可能为空,即tasky.cells.length == 0
,或者每个数组元素的值可能为空字符串。要测试这一点,您需要迭代每个数组元素并执行比较。 - Twisty