2010-01-17 203 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