看不到变量
Variable can't been seen
抱歉,这可能是一个简单的问题。我正在尝试使用 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
,因为它为每个数组索引调用函数。
已经解释了您的代码的问题是什么(i
范围),并且已经提供了解决方案。还可以看看这个相关的问题:循环中的JavaScript闭包 - 简单的实际示例。
但是,你可以以不同的方式解决它,根本不使用索引,而是使用 DOM 遍历,以一种更面向 jQuery 的方式。我假设您的 HTML 看起来像这样:
<ul id="#nav">
<li><a>...</a></li>
<li><a>...</a></li>
</ul>
即a
元素是您要更改的li
的后代。
然后,您可以使用以下代码实现相同的目的:
function testIndex(navIndex){
$('#nav a').slice(0,5).not(function(i) {
return i === navIndex;
}).hover(function(){
$(this).fadeTo('fast', 0.3, function(){
$(this).css('background-color','#ff3520')
.closest('li').css('color', '#ffffff');
}).fadeTo('fast', 1);
}, function(){
$(this).fadeTo('fast', 0.3, function(){
$(this).css('background-color', '#e8e8e8');
.closest('li').css('color', '#ff3520');
}).fadeTo('fast', 1);
});
}
相关文章:
- 为什么我在Internet Explorer上看不到html元素
- ajax请求成功,但可以'我看不到我的数据
- 使用jQuery for RSS看不到多个帖子
- 执行此代码时,我看不到警告框
- Javascript 方法看不到对象变量
- 看不到变量
- Phantomjs 看不到 Twitter/Facebook 授权页面
- AS3 XML上的翻页在IE和FIREFOX上看不到
- JavaScript 看不到声明的变量
- 看不到函数外的Javascript变量
- Javascript对象看不到内部函数
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- 从Node.js查询Neo4j时看不到任何回调
- I'我在css中做了一些隐藏的东西,我可以'I don’我现在点击按钮时看不到它
- 我看不到Javascript数组中的图像
- 硒 IDE 1.8.1 警报框:运行测试时看不到警报框
- 在网格PhongMaterial地面和聚光灯上看不到任何带有Colada模型的阴影
- 我正在通过 javascript 向表添加行,但是当我提交页面时,C# 看不到添加的行
- 为什么我看不到在$scope函数中定义的$scope变量?
- 如果分配给嵌套require中的变量,RequireJS R.js看不到依赖的require文件