2010-10-14 179 views
32

我已經做了一些文檔搜索,並在網上花了一段時間,但找不到解決方案!我希望警報告訴我單擊.thumb時每個()的哪個迭代。jquery each()計數器

EG:有六個.thumb的我點擊數字3,瀏覽器彈出3!

實際發生的是無論哪個.thumb被點擊,6彈出。

var counter = 1; 
$('.thumb').each(function() { 
    $(this).click(function() { 
     alert (counter); 
    }); 
    counter++; 
}); 

任何幫助感激地接受。

回答

59

那是因爲你在共享相同counter變量所有click處理程序,這是無論它最終是在循環的末尾。相反,使用一個傳遞到循環(即.each()已經存在的索引參數),就像這樣:

$('.thumb').each(function (i) { 
    $(this).click(function() { 
     alert (i+1); //index starts with 0, so add 1 if you want 1 first 
    }); 
}); 

You can test it here

0

函數()調用是一個匿名函數聲明。你必須瞭解LISP函數的工作原理(是的,ecmascript是lisp)。

$(「拇指」)每,你應該使用類似(未經測試),而不是:

var list = $('.thumb'); 
for(var i=0; i<list.length; i++) { 
    $(list[i]).click(function(){ 
     alert(i); 
    }); 
} 
+1

這並不能解決問題,它效率低很多,但是共享變量的問題相同,它們都會提醒'我'處於循環結尾。 – 2010-10-14 02:05:47

+0

@尼克是對的。這將產生與問題中相同的結果。 – user113716 2010-10-14 02:15:50

+0

好吧,我的壞。我不應該發佈這個沒有測試。 – 2010-10-14 02:17:37

0

要使用的解決方案一樣@Paulo建議,你需要做這樣的:

var list = $('.thumb'); 

for(var i=0; i<list.length; i++) { 
    (function(i_local) { 
     list.eq(i).click(function(){ 
      alert(i_local); 
     }); 
    })(i + 1); 
}​ 

...雖然我是use @Nicks .each() solution instead。更乾淨。