gpt4 book ai didi

javascript - 将复选框和 id 添加到表中?本地存储

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:29 25 4
gpt4 key购买 nike

好的,我正在尝试创建一个待办事项列表。我需要复选框,以及附加到每个任务的 ID --- 我需要保存复选框状态,以便我可以再次将其拉出..我想知道是否有一种方法可以在不添加另一个“保存”的情况下执行此操作键入按钮?单击该框后我可以保存它吗?我需要能够将状态保存到本地存储中,因此在刷新时,当表格显示在网站上时,它将包括复选框的当前状态/任务是否已完成...这就是我目前所拥有的,我确实做了一些研究,如果我完全拆掉我所拥有的东西,看起来有一种方法可以实现这一点,但我似乎无法让它正常工作,我试图弄清楚是否有一个做我需要做的事情的方法,而不需要完全重新开始并拆除所有东西......

JS:

    var table = document.getElementById("tableBody");


var toDoArray = [];
buildTable();

function buildTable() {
var retrievedTaskObject = localStorage.getItem("task");
var parsedObject = JSON.parse(retrievedTaskObject);
for (i = 0; i < parsedObject.length; i++) {
toDoArray.push(getTaskObj(parsedObject[i].name, parsedObject[i].date));
addTaskToTable(parsedObject[i]);
}
}




function addTaskToTable(obj){
var row = table.insertRow(0);
var cellName = row.insertCell(0);
var cellDate = row.insertCell(1);
var cellId = row.insertCell(2);
var cellCheck = row.insertCell(3);
cellName.innerHTML= obj.name;
cellDate.innerHTML= obj.date;
var checkStuff = "<input type='checkbox'>";
cellCheck.innerHTML = checkStuff;

}

function submitForm(name,date) {
var addTaskName = document.getElementById("taskName").value;
var addTaskDate = document.getElementById("dateTask").value;
var taskSomething = getTaskObj(addTaskName,addTaskDate);
toDoArray.push(taskSomething);
addTaskToTable(taskSomething);
var storedArray = JSON.stringify(toDoArray);
localStorage.setItem("task",storedArray);
};

function getTaskObj(taskName,taskData){
var taskObject = {
name: taskName,
date: taskData,
};
return taskObject;
}

html:

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="todostyle.css"/>

<title>To Do List</title>
</head>
<body>
<div class="container">
<h1 class="center">Welcome!</h1>
<h2 class="center">Here you can make your own to-do list.</h2>
<p>
<form>
<label>Task:</label>
<input id="taskName" type="text"/>
<label>Date Created:</label>
<input id="dateTask" type="date"/>
<button onclick="submitForm()" type="button" id="submit">Submit</button>

</form>
</p><p>
<table id="myTable" border="1"><thead>To Do List</thead>
<th> Task Name </th><th> Date Created </th><th> ID </th><th> Completed? </th><tbody id="tableBody"></tbody>
</table>
</p>
</div>
<script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="test.js"></script>
</body>
</html>

最佳答案

执行此操作的一种方法是通过 creating a <input type="checkbox"/> element并附上onchange event handler当存储发生变化时,它将更新存储。

现在,为了知道要更新哪个任务,我们需要任务在数组中的位置(即索引)。我们将提供索引作为 addTaskToTable() 的第二个参数因为那是您构建表格行的时候。

// be safe: .getItem(key) will return null at the beginning,
// so have a fallback empty array if that happens
var toDoArray = JSON.parse(localStorage.getItem("task")) || [];
var table = document.getElementById("tableBody");

buildTable();

function buildTable() {
for (i = 0; i < toDoArray.length; i++) {
// pass index of current element as 2nd parameter
addTaskToTable(toDoArray[i], i);
}
}

// add index as 2nd argument
function addTaskToTable(task, i) {
var row = table.insertRow(0);
var cellName = row.insertCell(0);
var cellDate = row.insertCell(1);
var cellId = row.insertCell(2);
var cellCheck = row.insertCell(3);
// create checkbox
var checkbox = document.createElement('input');

cellName.innerHTML= task.name;
cellDate.innerHTML= task.date;

checkbox.type = 'checkbox';
checkbox.checked = task.completed;
checkbox.onchange = function () {
// set completed property when checkbox is changed
toDoArray[i].completed = this.checked;
// save localstorage
localStorage.setItem("task", JSON.stringify(toDoArray));
};
cellCheck.appendChild(checkbox);
}

function submitForm() {
var task = createTask(taskName.value, dateTask.value, false);
toDoArray.push(task);
// pass index of last element added
addTaskToTable(task, toDoArray.length - 1);
localStorage.setItem("task", JSON.stringify(toDoArray));
};

function createTask(name, date, completed) {
return {
name: name,
date: date,
completed: completed
};
}

关于javascript - 将复选框和 id 添加到表中?本地存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42323064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com