本节作业疑问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回答

好帮手慕慕子

2022-04-24

同学你好,对于你的问题解答如下:

1、不是。

题目中的代码无法实现效果是因为代码按着从上到下的顺序执行,循环遍历列表给li绑定点击事件时,此时的li是页面中已经存在的li,并不包括后面新添加的li元素。

当点击按钮添加新的li时,并不会再次执行for循环代码,给新添加的li绑定点击事件,所以新添加的li没有点击移出的功能

2、粘贴的代码,for循环中使用了变量li和ol,但是没有提前声明

建议修改:

(1)声明变量li,保存所有的列表项

(2)声明ol变量用来保存列表ul元素

(3)按钮点击事件中,新建的li元素赋值给了变量ol,所有后面追加到list中的应该是ol

https://img.mukewang.com/climg/6264c10b092d0fd607620590.jpg

经过上述修改后,控制台不报错了,但是不符合项目作业的要求。

建议:使用事件委托,给父元素ul绑定点击事件,结合e.target获取到当前被点击的li元素,并将其移除

https://img.mukewang.com/climg/6264c1dd09507b8608730832.jpg

祝学习愉快~

0

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程