2014-02-26 38 views
0

我需要for循環中的點擊函數,因此每個id元素都是可點擊的。但是我也需要點擊函數中的i,這就是爲什麼我認爲自動執行匿名函數是最好的方法。但由於某種原因,這是行不通的,也許是因爲點擊功能不允許我轉發參數?我做錯了什麼?for循環中自動執行匿名點擊功能

for (var i = 0; i < countItems; i++) {  
     $("#item-" + i).click(function(idx) { 
      alert(idx); 
    })(i) 
} 
+0

事件總是作爲事件處理程序的第一個參數傳遞。無論如何,你不應該在這裏使用任何循環。而是使用class作爲選擇器或僅設置一個處理程序,即委託事件。如果idx應該是單擊元素的ID,那麼'this.id'會返回它 –

+0

有時候只有很少代碼的問題你會認爲它會更容易回答,但是當許多事情出錯時,我甚至不知道從哪裏開始......跳過。 – elclanrs

+0

無論如何,我需要這個for循環,我只是在這裏抽象它 – Babsi

回答

1

自執行的函數必須返回一個function

for (var i = 0; i < countItems; i++) { 
    $("#item-" + i).click(function(indx){ 
     return function(){ //must return a function 
      alert(indx); 
     } 
    }(i)); 
} 

JS小提琴:http://jsfiddle.net/HuHXr/

0
for (var i = 0; i < countItems; i++) { 
    (function(i){ 
     $("#item-" + i).click(function(idx) { 
      alert(idx); 
     }); 
    })(i); 
} 

還要注意的是idx是事件對象。 小提琴:http://jsfiddle.net/2DRLx/

0

,你可以嘗試這樣的事情

for (var i = 0; i < countItems; i++) {  
    $("#item-" + i).click(clickFunctn); 
} 

function clickFunctn(obj){ 
    var i=$(obj).attr('id').split('-')[1]; 
    alert(i); 
} 

這樣你會優化代碼,你的'我'將與你也是,而且所有項目都是可點擊的。你只是綁定一個處理函數。

1

作爲邊注,使用綁定()JavaScript方法:

for (var i = 0; i < countItems; i++) { 
    $("#item-" + i).click(function(indx){ 
      alert(indx); 
    }.bind($("#item-" + i)[0],i)); 
}