【发布时间】:2017-09-04 06:32:51
【问题描述】:
我对在 JS 中操作 DOM 中的元素非常陌生,因此我正在创建一个简单的待办事项列表以使我更加舒适,并且我可以使用输入添加项目并通过单击列表项目来删除项目。 虽然这可能不是最佳实践和限制,但我只是想使用创建和删除元素而不是使用对象或类,直到我更熟悉,也使用普通/香草 js,所以请在回答时记住这一点。
我正在尝试添加一个单击事件,当单击 <li> 时删除 <li>。
我的逻辑是...
加载页面时,我不能只对所有 <li>s 运行 for 循环并添加事件处理程序,因为所有 <li> 尚不存在。
所以我尝试的解决方案是当 addTaskButton 事件被触发时,我们得到事件发生时页面上的所有<li>,我们遍历所有这些并添加一个事件监听器到<li>等待点击时被移除。
这似乎不起作用,可能过于复杂。
有人可以像我 5 岁一样简单地向我解释为什么这不起作用或有什么更好的方法来做到这一点?
提前谢谢你
HTML
<ul id="taskList">
<li>example</li>
</ul>
<input type="text" id="addTaskInput">
<button id="addTaskButton">Add Task</button>
JavaScript
const taskList = document.querySelector("#taskList");
const addTaskInput = document.querySelector("#addTaskInput");
const addTaskButton = document.querySelector("#addTaskButton");
let taskItem = document.querySelectorAll("li");
addTaskButton.addEventListener("click", () => {
let taskItem = document.createElement("li");
taskItem.textContent = addTaskInput.value;
for (let i = 0; i < taskItem.length; i++) {
taskItem[i].addEventListener("click", () => {
let taskItem = document.querySelectorAll("li");
taskList.removeChild(taskItem[i]);
});
}
taskList.appendChild(taskItem);
addTaskInput.value = " ";
});
【问题讨论】:
-
@adiga 这不是我要找的答案,也不适用于我的问题
标签: javascript for-loop addeventlistener removechild dom-manipulation