2010-01-17 168 views
1

我有一堆像“check1”,“check2”,“check3”等ID的元素。我想通过它们中的每一个循环并隐藏它们并设置onclick函数。这里是我当前的代码:jquery选择问题

for (i = 0; i < badgeArray.length; i++) { 
     jQuery("a#check"+ i + "").click(function(){ 
      jQuery("#check" + i + "info").toggle(); 
      jQuery("a#check"+ i + "").toggleClass("extrasopen"); 
      jQuery("a#check"+ i + "").toggleClass("extrasclosed"); 
     }); 
     jQuery("#check" + i + "info").hide(); 
    } 

所有“#检查” + 1 +“信息”元素是隐藏的,但隐藏/显示功能不起作用。当我尝试它只是这样一个元素:

jQuery("a#check1").click(function(){ 
    jQuery("#check1info").toggle(); 
    jQuery("a#check1").toggleClass("extrasopen"); 
    jQuery("a#check1").toggleClass("extrasclosed"); 
}); 

它的工作原理。

任何想法?

+0

您可以发布您的HTML样本? – Sampson 2010-01-17 17:57:09

回答

2

你需要使用闭包:

for (var i = 0; i < badgeArray.length; i++) { 
    (function(i) { 
     jQuery("a#check"+ i).click(function(){ 
      jQuery("#check" + i + "info").toggle(); 
      jQuery("a#check"+ i).toggleClass("extrasopen").toggleClass("extrasclosed"); 
     }); 
     jQuery("#check" + i + "info").hide(); 
    })(i); 
} 

但你也可以使用上下文元素和它的属性:

for (var i = 0; i < badgeArray.length; i++) { 
    jQuery("a#check"+ i).click(function(){ 
     jQuery("#" + this.id + "info").toggle(); 
     jQuery(this).toggleClass("extrasopen").toggleClass("extrasclosed"); 
    }); 
    jQuery("#check" + i + "info").hide(); 
} 
+0

就是这样。多谢。 – Mladen 2010-01-17 18:09:13