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

关于javascript代码问题,bli[i].style.display='block';不执行?

关于javascript代码问题,bli[i].style.display='block';不执行?

慕田峪9158850 2021-12-30 11:07:50
<script type="text/javascript">window.onload=function(){var a=document.getElementById('lable');var ali=a.getElementsByTagName('li');var b=document.getElementById('change');var bli=b.getElementsByTagName('li');ali[0].style.marginTop='0';ali[0].style.backgroundColor='#fff';ali[0].style.borderBottom='none';ali[0].style.height='20px';ali[0].style.lineHeight='20px';for(var i=0;i<ali.length-1;i++){ali[i].onclick = function(){for(var j=0;j<ali.length-1;j++){ali[j].style.marginTop='2px';ali[j].style.backgroundColor='#DADADA';ali[j].style.borderBottom='1px solid #898C95';ali[j].style.height='17px';ali[j].style.lineHeight='17px';bli[j].style.display='none';}this.style.marginTop='0';this.style.backgroundColor='#fff';this.style.borderBottom='none';this.style.height='20px';this.style.lineHeight='20px';bli[i].style.display='block';} } }</script>
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超8个赞

js闭包问题,你写的就是闭包举得最基本例子,执行onclick事件时,所绑定函数会沿着作用域链向上查找i值,此时在外部函数中找到的i值在循环结束时已经变成ali.length-2,并不是你所认为的一一对应的0,1,2...

查看完整回答
反对 回复 2022-01-03
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

不能这么写的,可以这么分析一下:
一开始加载的时候ali[i]有click事件,这时候,i不断自增,全部加载完成之后,点击触发事件,执行事件处理函数,这时候i是ali.length-1

查看完整回答
反对 回复 2022-01-03
?
绝地无双

TA贡献1946条经验 获得超4个赞

把这段JS放到页面最下边不用套window.onload=function(){}方法,试试看

查看完整回答
反对 回复 2022-01-03
  • 3 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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