日期:2014-05-16  浏览次数:20404 次

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