<!DOCTYPE html><html><head><title>test</title></head><body><ul><li>11111</li><li>22222</li><li>33333</li><li>44444</li><li>55555</li></ul></body><script type="text/javascript">var ul1 = document.getElementsByTagName('ul')[0];var lis = ul1.children;for(var i=0 ; i<lis.length ; i++){ lis[i].onclick = function(){ console.log(i)// lis[i].parentNode.removeChild(lis[i]);// this.parentNode.removeChild(this);}}</script></html>
2 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
onclick 里不应该直接使用 i ,这是一个变量
当你 for 结束时,i 的值已经是 5 了,所以所有的 onclick 的 i =5
如果要操作文档对象,尽量使用 ID、Class 等有固定特征的方式
操作父级、上、下关联对象,艹使用 this 会方便一些,在操作对象时,this 在此时代表对象本身。
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
你好,原因很简单,因为js没有块作用域的概念,循环var的i,直到循环结束还在整个作用域之内,而当click事件触发的时候,循环早就结束了,i的值只能是最大值,所以总是得到5。
下面是能实现你功能的正确方法之一:
<html><head> <meta charset='utf-8'> <style> </style> <script> window.onload=function(){ var oButton = document.getElementsByTagName("button"); num=0; for(var i=0;i<oButton.length;i++){ oButton[i].onclick=(function(idx){ return function(){ console.log(idx + 1); oButton[num].style.background="#ccc"; num=idx; this.style.background="#ff0000"; } })(i); } } </script></head><body> <button >点击1</button> <button >点击2</button> <button >点击3</button> <button >点击4</button> <button >点击5</button></body></html> |
添加回答
举报
0/150
提交
取消
