读书人

关于index索引的有关问题

发布时间: 2013-01-23 10:44:49 作者: rapoo

关于index索引的问题
做的是一个弹出菜单,点击某一个li标签改变box的display,如果我给定一个序号这段JS就能正常执行,使用索引就会出问题,看了半天也没看出自己哪里写错了,跪求高人指点迷津!ps:话说这种写法貌似比较常用的是创建选项卡……

<script type="text/javascript">
window.onload=function ()
{
var oNav=document.getElementById('nav');
var aLi=oNav.getElementsByTagName('ul')[0].getElementsByTagName('li');
var aBox=getByClass(oNav,'box');
var i=0;

for (i=0; i<aLi.length; i++)
{
aLi[i].index=i
aLi[i].onclick=function ()
{
for (i=0; i<aLi.length; i++)
{
aBox[i].style.display='none'
}
aBox[this.index].style.display='block'
};
};
};
function getByClass(o,n)
{
var arr=[];
var s=o.getElementsByTagName('*');

for (var i=0; i<s.length; i++)
{
if (s[i].className==n)
{
arr.push(s[i]);
};
};
return arr;
};
</script>

[解决办法]
你的onclick函数应该使用闭包:
aLi[i].onclick=function ()
{
for (i=0; i<aLi.length; i++)
{
aBox[i].style.display='none'
}
aBox[this.index].style.display='block'
};
改为:
aLi[i].onclick=(function (e){
return function(){
for (var i=0; i<aLi.length; i++){
aBox[i].style.display='none'
}
aBox[e].style.display='block';
}
})(i);
[解决办法]
你在 循环体力 alert 看看 变量 i到底是什么就可以了。参考闭包的概念:http://blog.csdn.net/xiaofan_sap/article/details/4676378

读书人网 >JavaScript

热点推荐