javascript - 看不到变量

标签 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);
                });
            };  
        };
    };

$('#nav li:eq('+i+')').css('color', '#ff3520');

无法看到“i”变量。我已经通过插入我自己的变量对其进行了测试并且它有效。

有什么建议吗?

谢谢。

最佳答案

因为您处于循环中,所以需要一个变量范围来保持对处理程序中 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);
            });
        }
    });
}

在 JavaScript 中,调用一个函数会产生一个变量范围,所以我在循环中使用了 $.each,因为它会为每个数组索引调用该函数。

关于javascript - 看不到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990458/

相关文章:

javascript - 多项选择,语法错误,无法识别的表达式:option [value = cc dd]

javascript - Jquery Time-Picker 隐藏在表内

swift - 如何异步返回 View ?什么?

javascript - 谷歌地图 react : Open InfoWindow by Default - not from onClick

javascript - Elasticsearch返回的结果大于范围内指定的结果

jquery - 当用户单击时,如何从 jquery ui 对话框中获取按钮 id 的值?

javascript - 如何创建 HTML5 播放列表循环功能

java - 匿名类的输出?

swift - 如何将闭包类型的 let 属性初始化为指向某个方法的指针?

javascript - HTML5、JavaScript : Drag and Drop File from External Window (Windows Explorer)