假设我们有一个简单的任务管理应用,希望能够添加、删除和标记任务的完成状态。下面是一个使用JavaScript实现该功能的完整项目实例:
当用户打开任务管理器应用,页面会渲染出以下几个部分:
-
标题(
<h1>):页面顶部显示的标题,向用户展示应用的名称。 -
表单(
<form>):包含一个输入框和一个提交按钮,用于添加新的任务。- 输入框(
<input type="text">):用于用户输入任务的描述。 - 提交按钮(
<button type="submit">):用户点击该按钮提交任务。
- 输入框(
-
任务列表(
<ul id="taskList">):用于显示已经添加的任务列表。 -
CSS 样式(可选):用于美化任务列表的显示效果,已完成的任务会有划线效果。
HTML 结构:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>任务管理器</title>
</head>
<body>
<h1>任务管理器</h1>
<form id="taskForm">
<input type="text" id="taskInput" placeholder="输入任务描述">
<button type="submit">添加任务</button>
</form>
<ul id="taskList"></ul>
<script src="script.js"></script>
</body>
</html>
CSS 样式(可选,用于美化界面):
ul {
list-style: none;
padding: 0;
}
li.completed {
text-decoration: line-through;
}
JavaScript 功能实现:
// 获取页面元素
const taskForm = document.getElementById('taskForm');
const taskInput = document.getElementById('taskInput');
const taskList = document.getElementById('taskList');
// 创建存储任务的数组
let tasks = [];
// 添加任务
function addTask(event) {
event.preventDefault(); // 阻止表单默认提交行为
const taskText = taskInput.value.trim(); // 获取输入的任务描述
if (taskText === '') {
return; // 如果任务描述为空,则不执行添加任务操作
}
const task = {
id: Date.now(), // 生成任务的唯一标识符
text: taskText,
completed: false // 任务默认为未完成
};
tasks.push(task); // 将任务添加到数组中
displayTask(task); // 显示任务在页面上
taskInput.value = ''; // 清空输入框
}
// 删除任务
function deleteTask(taskId) {
tasks = tasks.filter(task => task.id !== taskId); // 从数组中过滤出不包含指定id的任务
const taskElement = document.getElementById(taskId); // 获取任务对应的HTML元素
taskElement.remove(); // 从页面中删除任务
}
// 标记任务完成状态
function toggleTaskCompletion(taskId) {
const taskIndex = tasks.findIndex(task => task.id === taskId); // 获取任务在数组中的索引
tasks[taskIndex].completed = !tasks[taskIndex].completed; // 切换任务的完成状态
const taskElement = document.getElementById(taskId); // 获取任务对应的HTML元素
taskElement.classList.toggle('completed'); // 切换任务在页面中的样式
}
// 在页面上显示任务
function displayTask(task) {
const taskElement = document.createElement('li');
taskElement.id = task.id;
taskElement.innerText = task.text;
taskElement.addEventListener('click', () => toggleTaskCompletion(task.id));
const deleteButton = document.createElement('button');
deleteButton.innerText = '删除';
deleteButton.addEventListener('click', (event) => {
event.stopPropagation(); // 阻止事件冒泡,避免触发任务点击事件
deleteTask(task.id);
});
taskElement.appendChild(deleteButton);
taskList.appendChild(taskElement);
}
// 绑定表单提交事件
taskForm.addEventListener('submit', addTask);
JavaScript 部分实现了以下功能:
addTask函数:当用户点击提交按钮或按下回车键时触发该函数。函数首先阻止表单的默认提交行为,获取输入框中的任务描述,并根据描述创建一个任务对象。然后将任务添加到任务数组tasks中,并通过displayTask函数,在任务列表中显示任务。deleteTask函数:当用户点击任务对应的删除按钮时触发该函数。函数根据所点击任务的唯一标识符 (taskId) 从任务数组tasks中过滤出不包含该标识符的任务,实现了删除任务的功能。toggleTaskCompletion函数:当用户点击任务时触发该函数。函数根据所点击任务的唯一标识符 (taskId) 在任务数组tasks中找到对应的任务,并切换任务的完成状态 (completed)。同时,通过添加或移除 CSS 类名 (completed) 来切换任务在页面上的样式,实现了标记任务完成状态的功能。displayTask函数:根据传入的任务对象,在任务列表中创建一个新的任务项 (<li>),显示任务描述和删除按钮。同时,为任务项和删除按钮添加相应的事件监听器,以实现切换任务完成状态和删除任务的功能。- 事件绑定:通过
addEventListener函数,将addTask函数绑定到表单的提交事件上,确保在用户提交任务时触发相应的处理逻辑。这个示例项目通过 JavaScript 实现了一个简单的任务管理应用。通过输入框和按钮来添加任务,每个任务包含唯一的 ID、文本和完成状态。点击任务可以标记任务的完成状态,点击删除按钮可以删除相应的任务。这里的示例中,通过将任务存储在一个数组中,并根据数组的内容来更新页面上的任务列表。