2010-10-14 18 views
32

मैंने कुछ दस्तावेज के आसपास कुछ खोज किया है, और नेट पर कुछ समय बिताया है लेकिन इसका समाधान नहीं मिल रहा है! मैं चाहता हूं कि अलर्ट मुझे बताए कि प्रत्येक के पुनरावृत्ति() यह था जब। थंब क्लिक किया गया था।प्रत्येक Jquery() काउंटर

ईजी: छः हैं। थंब I का नंबर 3 पर क्लिक करें, ब्राउजर पॉप-अप 3!

वास्तव में क्या होता है इस पर ध्यान दिए बिना। थंब क्लिक किया गया है, 6 पॉप अप।

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

कोई भी मदद आभारी रूप से प्राप्त की जाती है।

उत्तर

59

है ऐसा इसलिए है क्योंकि आप सभीclick संचालकों के लिए एक ही counter चर साझा कर रहे हैं और यह जो कुछ भी यह पाश के अंत में किया जा रहा समाप्त होता है है।

$('.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: इसके बजाय, एक पाश में पारित कर दिया (.each() पहले से ही वहाँ है कि के सूचकांक पैरामीटर), इस तरह का उपयोग करें।

0

फ़ंक्शन() कॉल एक अज्ञात फ़ंक्शन घोषणा है। आपको समझना होगा कि LISP कैसे काम करता है (हाँ, ecmascript lisp है)।

इसके बजाय $ ('अंगूठे।') प्रत्येक, आप की तरह कुछ (untested) का उपयोग करना चाहिए की:।

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

यह समस्या का समाधान नहीं करता है, यह बहुत कम कुशल है, लेकिन साझा चर की एक ही समस्या है, वे सभी सावधान रहेंगे कि लूप के अंत में 'i' क्या था। –

+0

@ निक सही है। यह प्रश्न के समान परिणाम देगा। – user113716

+0

ठीक है, मेरा बुरा। मुझे परीक्षण के बिना इसे पोस्ट नहीं करना चाहिए। –

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 था। बहुत साफ

संबंधित मुद्दे