我需要for循環中的點擊函數,因此每個id元素都是可點擊的。但是我也需要點擊函數中的i,這就是爲什麼我認爲自動執行匿名函數是最好的方法。但由於某種原因,這是行不通的,也許是因爲點擊功能不允許我轉發參數?我做錯了什麼?for循環中自動執行匿名點擊功能
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(idx) {
alert(idx);
})(i)
}
我需要for循環中的點擊函數,因此每個id元素都是可點擊的。但是我也需要點擊函數中的i,這就是爲什麼我認爲自動執行匿名函數是最好的方法。但由於某種原因,這是行不通的,也許是因爲點擊功能不允許我轉發參數?我做錯了什麼?for循環中自動執行匿名點擊功能
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(idx) {
alert(idx);
})(i)
}
自執行的函數必須返回一個function
:
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(indx){
return function(){ //must return a function
alert(indx);
}
}(i));
}
for (var i = 0; i < countItems; i++) {
(function(i){
$("#item-" + i).click(function(idx) {
alert(idx);
});
})(i);
}
還要注意的是idx
是事件對象。 小提琴:http://jsfiddle.net/2DRLx/
,你可以嘗試這樣的事情
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(clickFunctn);
}
function clickFunctn(obj){
var i=$(obj).attr('id').split('-')[1];
alert(i);
}
這樣你會優化代碼,你的'我'將與你也是,而且所有項目都是可點擊的。你只是綁定一個處理函數。
作爲邊注,使用綁定()JavaScript方法:
for (var i = 0; i < countItems; i++) {
$("#item-" + i).click(function(indx){
alert(indx);
}.bind($("#item-" + i)[0],i));
}
事件總是作爲事件處理程序的第一個參數傳遞。無論如何,你不應該在這裏使用任何循環。而是使用class作爲選擇器或僅設置一個處理程序,即委託事件。如果idx應該是單擊元素的ID,那麼'this.id'會返回它 –
有時候只有很少代碼的問題你會認爲它會更容易回答,但是當許多事情出錯時,我甚至不知道從哪裏開始......跳過。 – elclanrs
無論如何,我需要這個for循環,我只是在這裏抽象它 – Babsi