दिलचस्प पोस्ट
मैं कैसे एक छवि JPanel या JFrame आकर्षित कर सकता हूँ? सत्र का उपयोग किए बिना एएसपी.एक्स.के. के पृष्ठों के मूल्यों को कैसे पारित किया जाए हटाए जाने से पहले एक पुष्टिकरण संदेश कैसे दिखाना है? वेब ब्राउजर में एक दस्तावेज़ में जावास्क्रिप्ट से सी # कोड को खोलें पीएचपी में फ्लोट की तुलना करें विंडोज पर अजगर ओएस.path.join एक ऐसा एप्लिकेशन बनाएं जो एक परीक्षण अवधि के बाद समाप्त हो जाएगा मैं एक विशिष्ट शब्द के सभी उदाहरणों की शैली / भागों / को कैसे jQuery का उपयोग कर सकता हूं? क्रॉस प्लेटफार्म Java SWT अनुप्रयोग बनाएँ जावा में एक स्थानीय फाइल को यूआरएल में पास करें AndroidManifest.xml में debuggable झंडा निर्धारित नहीं किया जा सकता Android किटकैट में एमएमएस संदेश प्राप्त करें मैं डेल्फी में थ्रेडिंग करने के विभिन्न तरीकों के बीच कैसे चुनूं? सबसे सटीक परिणाम प्राप्त करने के लिए किस आदेश में जोड़ा जाना चाहिए? HTTP स्ट्रीमिंग लाइव

जावास्क्रिप्ट / डीओएम: डॉम ऑब्जेक्ट की सभी घटनाओं को कैसे निकालना है?

बस प्रश्न: क्या किसी वस्तु की सभी घटनाओं को पूरी तरह से हटाने का कोई तरीका है, जैसे कि एक div?

संपादित करें: मैं प्रति div.addEventListener('click',eventReturner(),false); जोड़ रहा हूँ div.addEventListener('click',eventReturner(),false); एक घटना।

 function eventReturner() { return function() { dosomething(); }; } 

EDIT2: मुझे एक रास्ता मिल गया, जो काम कर रहा है, लेकिन मेरे मामले के लिए उपयोग करना संभव नहीं है:

 var returnedFunction; function addit() { var div = document.getElementById('div'); returnedFunction = eventReturner(); div.addEventListener('click',returnedFunction,false); //You HAVE to take here a var and not the direct call to eventReturner(), because the function address must be the same, and it would change, if the function was called again. } function removeit() { var div = document.getElementById('div'); div.removeEventListener('click',returnedFunction,false); } 

Solutions Collecting From Web of "जावास्क्रिप्ट / डीओएम: डॉम ऑब्जेक्ट की सभी घटनाओं को कैसे निकालना है?"

मुझे यकीन नहीं है कि आप सभी घटनाओं को हटाने के साथ क्या मतलब है एक विशेष प्रकार के ईवेंट या एक प्रकार के सभी ईवेंट हैंडलर्स के लिए सभी हैंडलर्स निकालें?

सभी ईवेंट हैंडलर्स निकालें

यदि आप सभी ईवेंट हैंडलर्स (किसी प्रकार के) को हटाना चाहते हैं, तो आप तत्व क्लोन कर सकते हैं और इसे अपने क्लोन से बदल सकते हैं:

 var clone = element.cloneNode(); while (element.firstChild) { clone.appendChild(element.lastChild); } element.parentNode.replaceChild(clone, element); 

नोट: यह विशेषताओं और बच्चों को संरक्षित करेगा, लेकिन यह DOM गुणों में किसी भी परिवर्तन को संरक्षित नहीं करेगा।


विशिष्ट प्रकार के "बेनामी" ईवेंट हैंडलर्स को निकालें

अन्य तरीका है removeEventListener() का उपयोग removeEventListener() लेकिन मुझे लगता है कि आपने पहले ही कोशिश की है और यह काम नहीं कर रहा है। यहाँ पकड़ है :

addEventListener को एक गुमनाम समारोह में कॉल करना हर बार एक नया श्रोता बनाता है। कॉलिंग को removeEventListener को एक गुमनाम समारोह में कोई प्रभाव नहीं है । एक गुमनाम समारोह प्रत्येक समय को एक अद्वितीय वस्तु बनाता है, यह किसी मौजूदा ऑब्जेक्ट का संदर्भ नहीं है, हालांकि यह एक कॉल कर सकता है। इस तरीके से किसी घटना श्रोता को जोड़ते समय सुनिश्चित करें कि यह केवल एक बार जोड़ा जाता है, यह स्थायी है (हटाया नहीं जा सकता), जब तक उस वस्तु को जोड़ा गया है जो नष्ट हो गया है तब तक नहीं किया गया है।

आप अनिवार्य रूप से eventReturner को eventReturner लिए एक अनाम फ़ंक्शन पास कर रहे हैं जैसा कि eventReturner फ़ंक्शन देता है।

आपको इसे हल करने के लिए संभावनाएं हैं:

  1. किसी फ़ंक्शन का उपयोग न करें फ़ंक्शन का उपयोग सीधे करें:

     function handler() { dosomething(); } div.addEventListener('click',handler,false); 
  2. addEventListener लिए एक आवरण बनाएं जो removeAllEvents फ़ंक्शन के संदर्भ को संग्रहीत करता है और कुछ अजीब removeAllEvents फ़ंक्शन बनाते हैं:

     var _eventHandlers = {}; // somewhere global function addListener(node, event, handler, capture) { if(!(node in _eventHandlers)) { // _eventHandlers stores references to nodes _eventHandlers[node] = {}; } if(!(event in _eventHandlers[node])) { // each entry contains another entry for each event type _eventHandlers[node][event] = []; } // capture reference _eventHandlers[node][event].push([handler, capture]); node.addEventListener(event, handler, capture); } function removeAllListeners(node, event) { if(node in _eventHandlers) { var handlers = _eventHandlers[node]; if(event in handlers) { var eventHandlers = handlers[event]; for(var i = eventHandlers.length; i--;) { var handler = eventHandlers[i]; node.removeEventListener(event, handler[0], handler[1]); } } } } 

    और फिर आप इसका उपयोग इसके साथ कर सकते हैं:

     addListener(div, 'click', eventReturner(), false) // and later removeListeners(div, 'click') 

डेमो

नोट: यदि आपका कोड लंबे समय तक चलता रहता है और आप कई तत्वों को बनाते हैं और निकाले जाते हैं, तो आपको यह सुनिश्चित करना होगा कि आप इन्हें नष्ट करने के दौरान _eventHandlers में _eventHandlers तत्वों को हटा दें।

ईवेंट श्रोता की स्वयं का फ़ंक्शन remove() का उपयोग करें उदाहरण के लिए:

 getEventListeners().click.forEach((e)=>{e.remove()}) 

यह सभी श्रोताओं को बच्चों से निकाल देगा लेकिन बड़े पृष्ठों के लिए धीमा हो जाएगा। बेरहमी से लिखना सरल

 element.outerHTML = element.outerHTML; 

जैसा कि corwin.amber कहते हैं, वेबकिट में एक दूसरे के बीच मतभेद हैं।

क्रोम में:

 getEventListeners(document); 

जो आपको सभी मौजूदा घटना श्रोताओं के साथ एक ऑब्जेक्ट देता है:

 Object click: Array[1] closePopups: Array[1] keyup: Array[1] mouseout: Array[1] mouseover: Array[1] ... 

यहां से आप उस श्रोता तक पहुंच सकते हैं जिसे आप हटाना चाहते हैं:

 getEventListeners(document).copy[0].remove(); 

तो सभी घटना श्रोताओं:

 for(var eventType in getEventListeners(document)) { getEventListeners(document)[eventType].forEach( function(o) { o.remove(); } ) } 

फ़ायरफ़ॉक्स में

थोड़ा सा अलग है क्योंकि यह एक श्रोता आवरण का उपयोग करता है जिसमें कोई फ़ंक्शन नहीं है। आपको वह श्रोता प्राप्त करना होगा जिसे आप निकालना चाहते हैं:

 document.removeEventListener("copy", getEventListeners(document).copy[0].listener) 

सभी घटना श्रोताओं:

 for(var eventType in getEventListeners(document)) { getEventListeners(document)[eventType].forEach( function(o) { document.removeEventListener(eventType, o.listener) } ) } 

मैं इस पोस्ट के साथ एक समाचार वेबसाइट के कष्टप्रद प्रतिलिपि संरक्षण को अक्षम करने की कोशिश कर रहा के साथ ठोकर खाई।

का आनंद लें!

 var div = getElementsByTagName('div')[0]; /* first div found; you can use getElementById for more specific element */ div.onclick = null; // OR: div.onclick = function(){}; 

// संपादित करें

मुझे नहीं पता था कि आप घटनाओं को संलग्न करने के लिए किस पद्धति का उपयोग कर रहे हैं addEventListener आप इसका उपयोग कर सकते हैं:

 div.removeEventListener('click',functionName,false); // functionName is the name of your callback function 

अधिक जानकारी

यदि आप ऐसा कुछ करते हैं तो ब्राउज़र आपके लिए ऐसा करेगा:

div और इसकी विशेषताओं की प्रतिलिपि बनाएँ और इसे पुराने से पहले सम्मिलित करें, फिर सामग्री को पुराने से बदल दें और पुराने को हटा दें?

document पर सभी ईवेंट निकालना :

एक लाइन:

 for (key in getEventListeners(document)) { getEventListeners(document)[key].forEach(function(c) { c.remove() }) } 

सुंदर संस्करण:

 for (key in getEventListeners(document)) { getEventListeners(document)[key].forEach(function(c) { c.remove() }) }