如何使用JavaScript将输入框内容转换为复选框项(待办清单开发)
实现待办清单的复选框任务项功能
你当前代码的核心问题是复选框创建方式错误,且使用innerHTML会覆盖原有任务内容。以下是完整的修改方案,包含复选框创建、任务添加/状态切换/删除功能:
修改后的JavaScript代码
// 获取添加按钮和待办列表容器 var add_task = document.getElementById('TaskAdd'); var todoList = document.getElementById('Do1'); // 绑定点击事件 add_task.addEventListener('click', addtask); // 添加任务函数 function addtask() { // 获取输入框内容并去除首尾空格 var taskText = document.getElementById("Taskname").value.trim(); // 空内容直接返回,不添加无效任务 if (!taskText) return; // 创建复选框元素 var checkbox = document.createElement("INPUT"); checkbox.type = "checkbox"; checkbox.className = "task-checkbox"; // 创建任务文本节点 var taskNode = document.createTextNode(" " + taskText); // 创建删除按钮 var deleteBtn = document.createElement("button"); deleteBtn.textContent = "X"; deleteBtn.className = "delete-btn"; deleteBtn.addEventListener('click', function() { this.parentElement.remove(); }); // 创建列表项,组装所有元素 var listItem = document.createElement("LI"); listItem.appendChild(checkbox); listItem.appendChild(taskNode); listItem.appendChild(deleteBtn); // 将列表项添加到待办列表 todoList.appendChild(listItem); // 绑定复选框切换事件:完成/未完成任务迁移 checkbox.addEventListener('click', function() { var completedList = document.getElementById('Com1'); this.checked ? completedList.appendChild(this.parentElement) : todoList.appendChild(this.parentElement); }); // 清空输入框,优化用户体验 document.getElementById("Taskname").value = ""; }
补充CSS样式(优化界面)
在原有CSS基础上添加以下样式,让元素布局更美观:
.delete-btn { margin-left: 10px; background-color: #ff4444; color: white; border: none; border-radius: 50%; width: 20px; height: 20px; cursor: pointer; font-size: 12px; display: inline-flex; align-items: center; justify-content: center; } .task-checkbox { margin-right: 8px; }
关键修改点说明
- 修复复选框创建:原代码错误设置
TaskCheck属性,正确做法是设置type="checkbox" - 避免内容覆盖:不再用
innerHTML直接替换内容,而是创建新的<li>元素追加到列表,保留原有任务 - 输入校验:添加空内容判断,防止添加无效任务
- 任务状态切换:绑定复选框点击事件,勾选后将任务移到已完成列表,取消勾选移回待办列表
- 删除功能:添加删除按钮,点击可移除对应任务
- 体验优化:添加任务后自动清空输入框
完整HTML代码(保持原结构即可)
<html> <head> <title>To-Do List Project</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> </head> <body> <!-- Title of the project --> <h1 class="center"> To-Do List Program </h1> <!-- Creating the background of the cover --> <div class="background-cover"></div> <!-- Creating container to present the Inputfield to add task for the To-Do list --> <div class="container"> <h1 class="center"> Enter text into the input field to add items into your list </h1> <h1 class="center"> Click on the item to mark that the task are complete </h1> <h1 class="center"> Click on X to remove the task from To-Do List </h1> <input type="text" id="Taskname" name="Tname" placeholder="Input task" size="14"> <button type="button" id="TaskAdd" onclick="addtask();"> Add </button> <!-- Creating fieldset to locate the tasks into two sections, first section is the To-Do list --> <fieldset class="background-cover-3"> <legend class="background-cover-2"> To-Do: </legend> <ul id="Do1" style="list-style: none;"> <li> </li> </ul> </fieldset> <!-- Creating fieldset to locate the tasks into two sections, Second section is the Completed list --> <fieldset class="background-cover-3 fieldset2"> <legend class="background-cover-2 fieldset2"> Completed: </legend> <ul id="Com1" style="list-style: none;"> <li> </li> </ul> </fieldset> </div> <script src="main.js"></script> </body> </html>
内容的提问来源于stack exchange,提问作者WDpad159
相关产品推荐
相关产品推荐

