为了账号安全,请及时绑定邮箱和手机立即绑定

如下程序,请问为什么这里的console.log(i)是5?

如下程序,请问为什么这里的console.log(i)是5?

紫衣仙女 2022-01-05 11:07:48
<!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 在此时代表对象本身。

查看完整回答
反对 回复 2022-01-09
?
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>



查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号