दिलचस्प पोस्ट
जीएसएन – जेसन से एक टाइप ऐरेलिस्ट <टी> में परिवर्तित करें अपलोड किए गए फ़ाइल को JSF में कैसे सहेजें जावास्क्रिप्ट खपत के लिए सी # में उद्धरण बचें जावास्क्रिप्ट फ़ाइल रीडर – विखंडू में लंबी फ़ाइल पार्सिंग मैक ओएस पर IntelliJ IDEA JDK कॉन्फ़िगरेशन मैं jQuery में "होवर" कैसे खोलूं? एसवीएन में परिणाम कोड का क्या मतलब है? एक पीडीएफ में एकाधिक पीडीएफ फाइलें मर्ज / कन्वर्ट करें सी ++ में make_shared और सामान्य shared_ptr में अंतर जावास्क्रिप्ट का उपयोग कर आरएसएस फ़ीड को कैसे पार्स करना है? कार्यों के लिए क्लिक करने योग्य लिंक के साथ IOS UITextView या UILabel OutofMemoryError: बिटमैप का आकार VM बजट से अधिक है (एंड्रॉइड) स्किकिट में जानने के लिए क्लासिफायरियर को डिस्क में सहेजें मैं एक एसक्यूएल को तैयार स्थिति में कैसे प्राप्त करूं? ब्राउज़र / टैब सक्रिय है या नहीं यह कैसे बताने के लिए

जावास्क्रिप्ट: ईवेंट श्रोता को हटा दें

मैं एक श्रोता परिभाषा के अंदर एक ईवेंट श्रोता को निकालने का प्रयास कर रहा हूं:

canvas.addEventListener('click', function(event) { click++; if(click == 50) { // remove this event listener here! } // More code here ... 

ऐसा कैसे किया जा सकता था? यह = घटना … धन्यवाद।

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट: ईवेंट श्रोता को हटा दें"

आपको नामित फ़ंक्शंस का उपयोग करना होगा।

इसके अलावा, click चर को हेन्डलर से बाहर होने की आवश्यकता होती है।

 var click_count = 0; function myClick(event) { click_count++; if(click_count == 50) { // to remove canvas.removeEventListener('click', myClick); } } // to add canvas.addEventListener('click', myClick); 

संपादित करें: आप इस तरह click_counter चर के आसपास बंद कर सकते हैं:

 var myClick = (function( click_count ) { var handler = function(event) { click_count++; if(click_count == 50) { // to remove canvas.removeEventListener('click', handler); } }; return handler; })( 0 ); // to add canvas.addEventListener('click', myClick); 

इस तरह से आप कई तत्वों में काउंटर बढ़ा सकते हैं।


यदि आप यह नहीं चाहते हैं, और चाहते हैं कि प्रत्येक व्यक्ति का अपना काउंटर हो, तो ऐसा करें:

 var myClick = function( click_count ) { var handler = function(event) { click_count++; if(click_count == 50) { // to remove canvas.removeEventListener('click', handler); } }; return handler; }; // to add canvas.addEventListener('click', myClick( 0 )); 

संपादित करें: मैं पिछले दो संस्करणों में वापस आने वाले हैंडलर का नाम भूल गया था। फिक्स्ड।

  canvas.addEventListener('click', function(event) { click++; if(click == 50) { this.removeEventListener('click',arguments.callee,false); } 

इसे करना चाहिए

आप एक नामित फ़ंक्शन अभिव्यक्ति (इस मामले में फ़ंक्शन को नाम दिया गया a ) का उपयोग कर सकते हैं, जैसे:

 var click = 0; canvas.addEventListener('click', function a(event) { click++; if (click >= 50) { // remove event listener `a` canvas.removeEventListener('click', a); } // More code here ... } 

त्वरित और गंदा कामकाज उदाहरण: http://jsfiddle.net/WqpfZ/1/

नामित फ़ंक्शन अभिव्यक्तियों के बारे में अधिक जानकारी: http://kangax.github.io/nfe/

अगर @ साइबरनेट का समाधान काम नहीं करता है, तो ट्रिगर को अपने स्वयं के फ़ंक्शन में तोड़ने का प्रयास करें ताकि आप इसे संदर्भित कर सकें।

 clickHandler = function(event){ if (click++ == 49) canvas.removeEventListener('click',clickHandler); } canvas.addEventListener('click',clickHandler); 
 element.querySelector('.addDoor').onEvent('click', function (e) { }); element.querySelector('.addDoor').removeListeners(); HTMLElement.prototype.onEvent = function (eventType, callBack, useCapture) { this.addEventListener(eventType, callBack, useCapture); if (!this.myListeners) { this.myListeners = []; }; this.myListeners.push({ eType: eventType, callBack: callBack }); return this; }; HTMLElement.prototype.removeListeners = function () { if (this.myListeners) { for (var i = 0; i < this.myListeners.length; i++) { this.removeEventListener(this.myListeners[i].eType, this.myListeners[i].callBack); }; delete this.myListeners; }; }; 

अगर कोई jquery का उपयोग करता है, तो वह ऐसा कर सकता है:

 var click_count = 0; $( "canvas" ).bind( "click", function( event ) { //do whatever you want click_count++; if ( click_count == 50 ) { //remove the event $( this ).unbind( event ); } }); 

आशा है कि यह किसी को मदद कर सकता है ध्यान दें कि @ उपयोगकर्ता 113716 द्वारा दिए गए उत्तर को अच्छी तरह से काम करना 🙂

मुझे लगता है कि आपको समय से पहले हेन्डलर कार्य को परिभाषित करने की आवश्यकता हो सकती है, जैसे:

 var myHandler = function(event) { click++; if(click == 50) { this.removeEventListener('click', myHandler); } } canvas.addEventListener('click', myHandler); 

यह आपको अपने आप से नाम से हेन्डलर को हटाने की अनुमति देगा।

यह कोशिश करो, यह मेरे लिए काम किया

 <button id="btn">Click</button> <script> console.log(btn) let f; btn.addEventListener('click', f=function(event) { console.log('Click') console.log(f) this.removeEventListener('click',f) console.log('Event removed') }) </script> 

इसे इस्तेमाल करे

 canvas.addEventListener('click', function(event) { click++; if(click == 50) { canvas.removeEventListener('click'); }