我想要的效果是
点击添加时能向指定的UI里添加LI;
添加好LI后,点击LI里面的删除按钮。删除刚刚添加的这个LI。
下面是我的代码求大神帮看一下谢谢哈
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
不太懂啊,不过for循环不应该放到onclick方法里边么?把html节点当做参数传进function。
先放上根据题主代码改正之后可以实现需求的代码。
主要是两个问题。
第一:我们应该保证在添加了该元素之后再绑定点击事件,所以不能直接在最下面写上绑定事件,否则永远都是没有绑定成功的,因为oa1从运行就获取的是一个空的元素集合,然后相当于给一个空的元素集合进行绑定。
第二:老问题了,就是闭包,所以我使用
的方式把i传了进去,关于闭包的详细情况,题主可以百度或者google一下。
执行顺序的问题,你原本写的是[添加]与[遍历]是同时进行,所以添加的没有被遍历到,正确的方法应该是:在[添加]这个动作完成后,再执行遍历:
for(var i=0;i<oa1.length;i++){..}
这句放在
oinpu.onclick = function() {..}
里面即可
问题原因:
window.onload会在页面加载完成后执行,由于此时页面的ul标签里面没有<li></li>标签,所以
var oa1 = oul1.getElementsByTagName('a'); 中 oa1 = [];
代码顺序执行到
时,根据 i < oa1.length 条件,for中的内容会执行0次。
解决办法有多个:
办法1,在oinpu.onclick中进行a标签onclick事件的绑定;
办法2,在添加a标签时,就指定a标签的onclick事件,即是在a标签属性中添加onclick,并且指定对应执行的方法。
建议使用事件代理的方法绑定,可以避免用到闭包
习惯用addEventListener,不过和你用onxx的方式本质是一样的。
记得用委托是最好的。