javascript - 添加/删除项目列表

标签 javascript

我正在练习 javascript。我建立了一个杂货 list ,我想在其中添加和删除项目。通过在输入表单中键入名称并按下发送按钮,可以很好地添加元素。我想通过单击删除刚刚创建的元素,但我却收到此错误:

"Uncaught TypeError: Cannot read property 'removeChild' of undefined at HTMLDocument.removeItem"

这里是代码:

HTML:-

<div id="paper">
    <h3 id="title">Groceries list:</h3>
    <ul id="list">
        <li></li>
    </ul>
</div>

<p class="grocery">
    <input type="text" name="grocery" placeholder="ex. Apple" id="blank" />
    <label for="grocery">Grocery Name</label>
</p>

<p class="submit">
    <input type="submit" value="SEND" id="btn" />
</p>


<script type="text/javascript" src="js/script.js"></script>

CSS:-

#paper {
   width: 300px;
   height: auto;
   margin: 20px auto;
   clear: both;
   background-color: orange;
}

.grocery, .submit{
   text-align: center;
   margin: 20px;
}

Javascript:-

var elList = document.getElementById("list");
var elButton = document.getElementById("btn");

function addItem(e) {
   var elElement = document.createElement("li");
   var whatever = el.value;
   var elText = document.createTextNode(whatever);
   elElement.appendChild(elText);
   elList.appendChild(elElement);
}

function removeItem(e) {
   var elElement = document.getElementsByTagName("li");
   var elContainer = elElement.parentNode;
   elContainer.removeChild(elElement);
}

var el = document.getElementById("blank");

elButton.addEventListener("click", addItem, false);

if ("DOMNodeInserted") {
   document.addEventListener("click", removeItem, false);
}

我该如何度过难关? 谢谢大家的帮助

最佳答案

if ("DOMNodeInserted") { document.addEventListener("点击", removeItem, false); } 是错误的。您需要将此事件处理程序附加到您创建的每个列表。 您可以在 addItem() 中使用 elElement.addEventListener("click", removeItem, false);,然后在 removeItem(e) 中执行此操作只需使用 e 使用 e.currentTarget 获取当前元素并将其删除。

这似乎可行:

var elList = document.getElementById("list");
var elButton = document.getElementById("btn");

function addItem(e) {
   var elElement = document.createElement("li");
   var whatever = el.value;
   var elText = document.createTextNode(whatever);
   elElement.appendChild(elText);
   elList.appendChild(elElement);
   elElement.addEventListener("click", removeItem, false);
}

function removeItem(e) {
   var elElement = e.currentTarget;
   var elContainer = elElement.parentNode;
   elContainer.removeChild(elElement);
}

var el = document.getElementById("blank");

elButton.addEventListener("click", addItem, false);
#paper {
   width: 300px;
   height: auto;
   margin: 20px auto;
   clear: both;
   background-color: orange;
}

.grocery, .submit{
   text-align: center;
   margin: 20px;
}
<div id="paper">
<h3 id="title">Groceries list:</h3>
<ul id="list">
    <li></li>
</ul>
</div>

<p class="grocery">
<input type="text" name="grocery" placeholder="ex. Apple" id="blank" />
<label for="grocery">Grocery Name</label>
</p>

<p class="submit">
<input type="submit" value="SEND" id="btn" />
</p>

关于javascript - 添加/删除项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177303/

相关文章:

javascript - 使用 AJAX 在 Flask 和 JS 之间发送数据以进行 chrome 扩展

javascript - Python Selenium PhantomJS 单击元素后返回空源

javascript - 使用 jQuery 在单独的 Div 中克隆多个表单元素

javascript - Firefox 扩展和 COM 组件之间的 IPC

javascript - 在 Facebook 的 Greasemonkey/tampermonkey 中使用 JavaScript 删除 CSS 边框

javascript - 通过ajax向数据库发出持续请求的有效方法是什么?

javascript - 对 HTML 表列中的每个单元格执行 X?

javascript - 原型(prototype)选择器

php - 所选菜单项的浮点线颜色

javascript - 当浏览器检索缓存的 html 页面时,JavaScript 会再次运行吗?