📅  最后修改于: 2023-12-03 14:54:15.422000             🧑  作者: Mango
JavaScript 是一种广泛使用的编程语言,可用于编写 Web 应用程序、桌面应用程序、游戏等。在待办事项列表中使用 JavaScript 项目的好处是可以轻松地实现一个交互式的应用程序,因为 JavaScript 是一种支持事件驱动编程的语言。
本项目实现了一个简单的待办事项列表,具有以下功能:
本项目使用了以下技术:
演示链接:待办事项列表
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>待办事项列表</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="main.js"></script>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">待办事项</h1>
<div class="card mt-3">
<div class="card-body">
<form id="todo-form">
<div class="form-group">
<input type="text" id="todo-input" class="form-control" placeholder="输入新的待办事项" required>
</div>
<button type="submit" class="btn btn-primary btn-block">添加</button>
</form>
</div>
</div>
<ul class="list-group mt-3" id="todo-list">
</ul>
<button type="button" class="btn btn-info btn-block mt-3" id="clear-btn">清除已完成的事项</button>
</div>
</body>
</html>
.completed {
text-decoration: line-through;
}
const form = document.getElementById('todo-form');
const input = document.getElementById('todo-input');
const list = document.getElementById('todo-list');
const clearBtn = document.getElementById('clear-btn');
form.addEventListener('submit', addTodo);
list.addEventListener('click', handleListClick);
clearBtn.addEventListener('click', clearCompleted);
// 初始化待办事项列表
render();
// 添加新的待办事项
function addTodo(event) {
event.preventDefault();
const value = input.value.trim();
if (value.length === 0) {
return;
}
const todo = {
id: `todo_${Date.now()}`,
content: value,
completed: false,
};
const todos = getTodos();
todos.push(todo);
saveTodos(todos);
render();
input.value = '';
input.focus();
}
// 根据当前状态渲染待办事项列表
function render() {
list.innerHTML = '';
const todos = getTodos();
todos.forEach(todo => {
const li = document.createElement('li');
li.id = todo.id;
li.innerHTML = `
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="${todo.id}_checkbox" ${todo.completed ? 'checked' : ''}>
<label class="custom-control-label ${todo.completed ? 'completed' : ''}" for="${todo.id}_checkbox">${todo.content}</label>
</div>
<button type="button" class="btn btn-outline-secondary btn-sm float-right">编辑</button>`;
list.appendChild(li);
});
}
// 编辑待办事项
function editTodo(todoId) {
const todo = getTodoById(todoId);
const newContent = window.prompt('请输入新的内容', todo.content);
if (newContent === null || newContent.trim().length === 0) {
return;
}
todo.content = newContent.trim();
saveTodos(getTodos());
render();
}
// 根据 ID 获取待办事项
function getTodoById(todoId) {
const todos = getTodos();
return todos.find(todo => todo.id === todoId);
}
// 获取待办事项列表
function getTodos() {
const todosJson = localStorage.getItem('todos');
return todosJson ? JSON.parse(todosJson) : [];
}
// 处理列表项点击事件
function handleListClick(event) {
const target = event.target;
if (target.tagName === 'INPUT') {
handleCheckboxClick(target.id);
} else if (target.tagName === 'BUTTON') {
handleButtonClick(target.parentNode.id);
} else {
return;
}
}
// 处理复选框点击事件
function handleCheckboxClick(checkboxId) {
const todoId = checkboxId.split('_checkbox')[0];
const todo = getTodoById(todoId);
todo.completed = !todo.completed;
saveTodos(getTodos());
render();
}
// 处理按钮点击事件
function handleButtonClick(todoId) {
editTodo(todoId);
}
// 保存待办事项列表
function saveTodos(todos) {
localStorage.setItem('todos', JSON.stringify(todos));
}
// 清除已完成的待办事项
function clearCompleted() {
const todos = getTodos().filter(todo => !todo.completed);
saveTodos(todos);
render();
}
这个项目展示了如何使用 HTML、CSS、JavaScript 和 LocalStorage 创建一个待办事项列表。本项目只是一个起点,你可以根据需要扩展其功能,例如添加提醒、分类、排序等功能。希望这个项目对你有帮助!