2010-08-31 11 views
6

डोम के बारे में कुछ बेवकूफ सवाल है, कृपया मुझेसही

नफरत नहीं कुछ कारणों मैं addEventListener को एक गुमनाम समारोह (मुख्य रूप से करने के लिए "पास" संदर्भ चर) उत्तीर्ण करने की आवश्यकता के लिए डोम घटना श्रोता पर मेमोरी लीक को रोकने के लिए रास्ता लेकिन एक बार बुलाए जाने वाले श्रोता को हटाया जा सकता है, इसलिए मैं समझना चाहता हूं कि नीचे दिखाया गया कोड श्रोता को अलग करने का सही तरीका है या नहीं।

var item = document.createElement("div"); 
    item.addEventListener("click", function(event) { 
     // do some stuff 
     // remove listener otherwise we generate a memory leak 
     item.removeEventListener("click", arguments.callee, false); 
    }, false); 

    var menu = document.getElementById("mymenu"); // some element 
    menu.appendChild(item); 

एक और सवाल, यदि तत्व मेनू को निकालने का उपयोग कर अपने माता-पिता से हटा दिया गया है तो श्रोता स्वचालित रूप से हटा दिया जाता है?

+0

यह आवश्यक लगता है के रूप में मोज़िला डॉक्स पर https://developer.mozilla.org/en/DOM सूचना दी /element.addEventListener#Memory_issues आप सही हैं मैं फ़ायरफ़ॉक्स का उपयोग कर रहा हूं;) – dafi

उत्तर

6

मुझे पता है कि आप एक अज्ञात फ़ंक्शन का उपयोग करना चाहते हैं, लेकिन आप नामित फ़ंक्शन से बेहतर हो सकते हैं; यह अभी भी एक ही बाहरी चर तक पहुंच होनी चाहिए।

शायद यह:

var item = document.createElement("div"); 
var listener = function(event) { 
     // do some stuff 
     // remove listener otherwise we generate a memory leak 
     item.removeEventListener("click", listener, false); 
    }; 
item.addEventListener("click", listener, false); 

var menu = document.getElementById("mymenu"); // some element 
menu.appendChild(item); 

ओह, और मैं आप से नफरत नहीं है :)

+0

निश्चित रूप से यह आसान लगता है, धन्यवाद – dafi