for(var i=0;i<menu_li.length;i++){
menu_li[i].onclick = function(){
for(i=0;i<menu_li.length;i++){
menu_li[i].className = '';
c_li[i].className = '';
}
this.className = 'tabFocus';
alert(i); //为什么这里的i一直是4 //c_li[i].className = 'conFocus';
}
}要做个js选项卡的功能,alert(i); //为什么这里的i一直是4??? 
不是应该点击不同的li 依次显示出  0 1 2 3 4 这样吗。

解决方案 »

  1.   

    <script>
      //闭包问题
    for(var i=0;i<menu_li.length;i++){
    (function (n){
    menu_li[n].onclick = function(){
    for(var i=0;i<menu_li.length;i++){
    //必须用 var i 不能访问上级的i
    menu_li[i].className = '';
    c_li[i].className = '';
    }
    this.className = 'tabFocus';
    alert(n); //现在就不会一直是4了
    }
    })(i);
    }
    </script>
      

  2.   

    闭包
    menu_li[i].index = i; // 这里指定下标 就能取了
    menu_li[i].onclick = function(){
     alert(this.index);
    }
      

  3.   

    我想问下为什么取不到i啊,它明明也在for循环里面。。
      

  4.   

    小伙儿,需要把Javacript基本功做好啊
      

  5.   

    当i=4的时候,匿名函数还没运行呢,到点击选项卡的时候,匿名函数就会沿着作用域链访问外层函数中的i,而外层函数中的i=4,若想解决这个问题,就扩展一下aler(i)所在函数的作用域链,外层加个立即执行的匿名函数,匿名函数有一个参数,用来保存变量i