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'变量无法看到.我通过插入自己的变量测试它,它的工作原理.
有什么建议?
谢谢.
因为您处于循环中,所以需要一个变量作用域来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循环,因为它为每个数组索引调用函数.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |