दिलचस्प पोस्ट
Django auto_now और auto_now_add यूटीएफ -8 सभी तरह से माध्यम से एसएसडी को STDIN से पासवर्ड कैसे प्राप्त करें आईफ़ोन – पुन: उपयोगइंडिफाइरर्स (यूआईटीबल वीजसेल) क्या हैं? एफसीएम (फायरबेज क्लाउड मेसेजिंग) एकाधिक डिवाइसों को भेजें विंडोज़ बैच स्क्रिप्ट से फ़ाइल / फ़ोल्डर चयनकर्ता संवाद ईजेबी 3.1 @ लोकलबीन बनाम कोई एनोटेशन नहीं MVC4 DataType.Date EditorFor क्रोम में तिथि मान प्रदर्शित नहीं करेगा, ठीक इंटरनेट एक्सप्लोरर में जावा डिफ़ॉल्ट कन्स्ट्रक्टर क्रोम एक्सटेंशन में एक छवि डालें सी: चार पॉइंटर और सरणी के बीच अंतर विंडोज पर गिट के साथ काम करने के लिए मैं एक संपादक कैसे स्थापित कर सकता हूँ? स्विंग वर्कर: फंक्शन मिल () मैं व्युत्पन्न क्लास कन्स्ट्रक्टर में बेस क्लास सदस्य चर को कैसे आरंभ करूं? उल्का में ग्लोबल वैरिएबल

लूप के लिए क्लिक संचालकों को असाइन करें

मुझे कई div का #mydiv1 , #mydiv2 , #mydiv3 , हो रहा है … और उन पर क्लिक करें हैंडलर असाइन करना चाहते हैं:

 $(document).ready(function(){ for(var i = 0; i < 20; i++) { $('#question' + i).click( function(){ alert('you clicked ' + i); }); } }); 

लेकिन जब 'you clicked 3' #mydiv3 (हर दूसरे क्लिक के लिए) पर क्लिक करते हैं 'you clicked 3' दिखाने के बजाय मुझे 'you clicked 20' मिलता है मैं क्या गलत कर रहा हूं?

Solutions Collecting From Web of "लूप के लिए क्लिक संचालकों को असाइन करें"

जावास्क्रिप्ट में छोरों में क्लोजर बनाने के लिए यह एक सामान्य गलती है। आपको कुछ तरह की कॉलबैक फ़ंक्शन की आवश्यकता है:

 function createCallback( i ){ return function(){ alert('you clicked' + i); } } $(document).ready(function(){ for(var i = 0; i < 20; i++) { $('#question' + i).click( createCallback( i ) ); } }); 

3 जून 2016 को अपडेट करें: चूंकि यह प्रश्न अभी भी कुछ कर्षण प्राप्त कर रहा है और ईएस 6 भी लोकप्रिय हो रहा है, मैं एक आधुनिक समाधान का सुझाव दूंगा। यदि आप ES6 लिखते हैं, तो आप let कीवर्ड का उपयोग कर सकते हैं, जो वैश्विक के बजाय i पाश को स्थानीय में बदलता है:

 for(let i = 0; i < 20; i++) { $('#question' + i).click( function(){ alert('you clicked ' + i); }); } 

यह समझने में छोटा और आसान है

स्पष्ट करने के लिए, मैं 20 के बराबर है क्योंकि क्लिक ईवेंट को लूप के समाप्त होने तक तक निकाल नहीं दिया जाएगा।

 $(document).ready(function(){ for(var i = 0; i < 5; i++) { var $li= $('<li>' + i +'</li>'); (function(i) { $li.click( function(){ alert('you clicked ' + i); }); }(i)); $('#ul').append($li); } }); 

आप क्लिक हैंडलर को एक बार (या कम से कम कई अनावश्यक क्लोजर नहीं बनाते हुए) के साथ मिलकर प्राप्त कर सकते हैं। सभी वर्गों को एक कक्षा में mydivs , फिर:

 $(document).ready(function(){ $('.mydivs').click(function(){ // Get the number starting from the ID's 6th character // This assumes that the common prefix is "mydiv" var i = Number(this.id.slice(5)); alert('you clicked ' + i); }); }); 

प्रारंभिक अक्षर बंद करने के लिए slice स्ट्रिंग पद्धति का उपयोग करते हुए, यह इसकी संख्या प्राप्त करने के लिए तत्व की आईडी को देखता है

नोट: इसका इस्तेमाल करना बेहतर हो सकता है

 $('#divcontainer').on('click', '.mydivs', function(){ 

के बजाय

 $('.mydivs').click(function(){ 

आम तौर पर, यदि आप बड़ी संख्या में आइटम पर क्लिक हैंडल असाइन करने के लिए देख रहे हैं, तो आप एक कंटेनर (उच्च स्तर की div) चाहते हैं जो आपके लिए क्लिकों की व्याख्या करता है, क्योंकि डोम से बुलबुले क्लिक करें

 <div id="bucket"> <span class="decorator-class" value="3"> ... </div> <script> $(document).ready(function(e){ $("#bucket").live('click', function(){ if(e.target).is('span'){ alert("elementid: " + $(e.target).val()); } } } <script> 

'क्लिक' हैंडलर को संलग्न करने के लिए प्रयोग करने पर आप अपना डेटा पास करने के लिए इवेंट डेटा का उपयोग कर सकते हैं:

 for(var i = 0; i < 20; i++) { $('#question' + i).on('click', {'idx': i}, function(e) { alert('you clicked ' + e.data.idx); }); } 
 // // let's creat 20 buttons // for(var j = 0; j < 20; j++) { $('body').append($('<button/>', {type: 'button', id: 'question' + j, text: 'Click Me ' + j})) } // // Passing data to the handler // for(var i = 0; i < 20; i++) { $('#question' + i).on('click', {'idx': i}, function(e) { console.log('you clicked ' + e.data.idx); }); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>