2011-12-19 23 views
1

我想創建一個動態的手風琴。我的問題是,我似乎無法得到for循環內的i變量的引用。我知道這是一個範圍問題,但我認爲這個關閉會做的伎倆....請有人幫助我,因爲這讓我完全瘋了。使用閉包在for循環內動態添加點擊函數

jQuery(function(){ 

    var tables = jQuery('table'); 
    var tableHeadings = jQuery('h3'); 

    for(i =0 , ii = tableHeadings.length; i < ii; i++){ 
    (function(){ 

     var index = i; 
     tables.eq(index).addClass('table-' + index); 

     tableHeadings.eq(index).click(function(){ 
      tables.eq(index).slideToggle(); 
     }); 

     })(); 
    } 
}); 
+0

有你有哪裏失敗一個活生生的例子?這應該工作AFAIK。 – Matt 2011-12-19 15:49:36

+0

爲什麼你需要在這裏關閉?只需直接在for循環中執行代碼即可。 – asawyer 2011-12-19 15:50:01

+0

@asawyer:因爲否則在點擊處理程序中,'i'(或'index')將始終是最後一個值。 – Matt 2011-12-19 15:50:42

回答

4

更妙的是:

tableHeadings.each(function(index, element) { 
    tables.eq(index).addClass('table-' + index); 

    tableHeadings.eq(index).click(function() { 
    tables.eq(index).slideToggle(); 
    }); 
}); 
+0

不知道,如果它是更好的使用' tableHeadings.eq(index)'或'$(this)' – 2011-12-19 15:57:41

+0

好點。我只是複製粘貼身體,但你是對的。由於需要關聯'tables'和'tableHeadings',這是一個不那麼簡單的情況 - 我可能會重構DOM以將它們保留在一起,也許包裝在DIV中,然後使用包裝器作爲選擇器並循環使用var。 – wrschneider 2011-12-19 16:53:00