本节作业疑问4-24
来源:4-24 项目作业
慕小白0101
2022-04-24 00:21:13
慕慕遇到的问题:发现新添加的列表项没有点击移除的功能,需要使用什么方法才能完成。
本节题目中出现这个问题是因为使用了querySelector是静态获取元素,而不是使用getElementById去动态获取元素么?为什么下面的代码无法得到预期结果。
<input type="text" class="textInput">
<button id="btn">添加</button>
<ul id="list">
<li >吃饭</li>
<li >睡觉</li>
<li >打豆豆</li>
</ul>
<script>
// 获取元素
var textInput = document.querySelector(".textInput")
var btn = document.querySelector("#btn")
var list = document.getElementById("list")
// 给按钮绑定点击事件
btn.onclick = function () {
var ol = document.createElement("li")
ol.innerHTML = textInput.value;
list.appendChild(li)
textInput.value = ""
}
// 给li绑定点击事件
for (var i = 0; i < li.length; i++) {
li[i].onclick = function (e) {
ol.removeChild(e.target)
}
}
</script>1回答
同学你好,对于你的问题解答如下:
1、不是。
题目中的代码无法实现效果是因为代码按着从上到下的顺序执行,循环遍历列表给li绑定点击事件时,此时的li是页面中已经存在的li,并不包括后面新添加的li元素。
当点击按钮添加新的li时,并不会再次执行for循环代码,给新添加的li绑定点击事件,所以新添加的li没有点击移出的功能
2、粘贴的代码,for循环中使用了变量li和ol,但是没有提前声明
建议修改:
(1)声明变量li,保存所有的列表项
(2)声明ol变量用来保存列表ul元素
(3)按钮点击事件中,新建的li元素赋值给了变量ol,所有后面追加到list中的应该是ol

经过上述修改后,控制台不报错了,但是不符合项目作业的要求。
建议:使用事件委托,给父元素ul绑定点击事件,结合e.target获取到当前被点击的li元素,并将其移除

祝学习愉快~
相似问题