变量无法看到

Dom*_*ore 2 javascript jquery closures

抱歉,这可能是一个简单的问题.我正在尝试使用jQuery构建我的第一个导航.这个想法是,在按钮悬停时,只要不是"选中"按钮,背景颜色和文本颜色就会改变.除了文字颜色外,我所有这一切都很好.就像在jQuery中一样,它看不到我的循环变量:

function testIndex(navIndex){
        for(i=0; i<=4; i++){
            if(i != navIndex){
                $('#nav a:eq('+i+')').hover(function(){
                    $(this).fadeTo('fast', 0.3, function(){
                        $(this).css('background-color','#ff3520');
                        $('#nav li:eq('+i+')').css('color', '#ffffff');
                    }).fadeTo('fast', 1);
                },
                function(){
                    $(this).fadeTo('fast', 0.3, function(){
                        $(this).css('background-color', '#e8e8e8');
                        $('#nav li:eq('+i+')').css('color', '#ff3520');
                    }).fadeTo('fast', 1);
                });
            };  
        };
    };
Run Code Online (Sandbox Code Playgroud)

$('#nav li:eq('+i+')').css('color', '#ff3520');
Run Code Online (Sandbox Code Playgroud)

'i'变量无法看到.我通过插入自己的变量测试它,它的工作原理.

有什么建议?

谢谢.

gra*_*ing 5

因为您处于循环中,所以需要一个变量作用域来i在处理程序中保持引用.

function testIndex(navIndex){
    $.each(Array(5), function(i) {
        if(i != navIndex){
            $('#nav a:eq('+i+')').hover(function(){
                $(this).fadeTo('fast', 0.3, function(){
                    $(this).css('background-color','#ff3520');
                    $('#nav li:eq('+i+')').css('color', '#ffffff');
                }).fadeTo('fast', 1);
            },
            function(){
                $(this).fadeTo('fast', 0.3, function(){
                    $(this).css('background-color', '#e8e8e8');
                    $('#nav li:eq('+i+')').css('color', '#ff3520');
                }).fadeTo('fast', 1);
            });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在JavaScript中调用函数会产生变量作用域,所以我用于$.each循环,因为它为每个数组索引调用函数.