2011-02-13 53 views
1

如何遍历包含5个元素的数组。我有5个元素,像imgone,imgtwo,imgree,imgfour,imgfive。通过由Id调用它们来遍历数组元素

var ids = 
[ 
    "#imgone", 
    "#imgtwo", 
    "#imgthree", 
    "#imgfour", 
    "#imgfive" 
]; 
for (var i = 0; id = ids[i]; i++) 
{ 
    $(id).click(function() { 

     $("#cell1,#cell2,#cell3,#cell4,#cell5").hide(); 
     $("#cell" + (i+1)).show(); 

    }); 
} 
}); 

然后,我有一个5种标记元素如

<a href="#" id="imgone"><img src ="myimage1" /></a>  
<a href="#" id="imgtwo"><img src ="myimage2" /></a>  
<a href="#" id="imgthree"><img src ="myimage3" /></a>  
<a href="#" id="imgfour"><img src ="myimage4" /></a>  
<a href="#" id="imgfive"><img src ="myimage5" /></a> 

CELL1,小区2,ET-人是我的块,我需要显示/隐藏的onclick一个元件。

btw此代码始终隐藏所有单元格块并显示cell6,这在我的代码中不存在。 我的意思是$("#cell" + (i+1)).show();永远不会将i的值设为0,1,2,3或4.

那么如何迭代数组并显示隐藏我的单元格。我认为这行代码$(id).click(function()有问题,但无法弄清楚什么?

回答

3

这是一个关闭问题,变量i指向循环中使用的i,并且在执行时总是6

使用这个代码,而不是

for (var i = 0; id = ids[i]; i++) 
{ 
    var fnc = function(j){ 
     return function() { 
      $("#cell1,#cell2,#cell3,#cell4,#cell5").hide(); 
      $("#cell" + (j+1)).show(); 
     }; 
    }(i); 
    $(id).click(fnc); 
} 

更多关于JavaScript的关闭看到How do JavaScript closures work?

1

你可以jquerify它:

var ids = 
[ 
    "#imgone", 
    "#imgtwo", 
    "#imgthree", 
    "#imgfour", 
    "#imgfive" 
]; 
$(ids.join(,)).each(function(i){ 
    $(this).click(function(){ 
     $("#cell1,#cell2,#cell3,#cell4,#cell5").hide(); 
     $("#cell" + (i+1)).show(); 
    }); 
}); 
+0

$(本)。点击(函数(){ 控制从来没有进入这个函数。btw什么是这个函数参数i – singularity 2011-02-13 08:47:43