猿问

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

<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>

慕田峪9158850
浏览 222回答 3
3回答

慕仙森

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

慕哥6287543

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

绝地无双

把这段JS放到页面最下边不用套window.onload=function(){}方法,试试看
随时随地看视频慕课网APP

相关分类

JavaScript
Java
我要回答