2012-02-29 17 views
8

मैं एक समस्याUncaught RangeError: अधिकतम कॉल स्टैक आकार से अधिक हो, जावास्क्रिप्ट

open: function($type) { 
      //Some code 
      document.getElementById($type).addEventListener("click", l.close($type), false); 
    }, 
    close: function($type) { 
      //There is some code too 
      document.getElementById($type).removeEventListener("click", l.close($type), false); 
      //^ Recursion & Uncaught RangeError: Maximum call stack size exceeded 
    } 

मैंने क्या गलत कर रहा हूँ है? इस क्लिक के बिना ईवेंट श्रोता सबकुछ अच्छी तरह से काम कर रहा है। और तीसरा पैरामीटर क्या कर रहा है (सच | झूठा)? धन्यवाद।

+0

https://developer.mozilla.org/en/DOM/element.removeEventListener तीसरा पैरामीटर झंडे चाहे आप ईवेंट श्रोता को ईवेंट कैप्चरिंग (बुलबुले का विरोध करने के रूप में) का उपयोग करने के लिए चाहते हैं या नहीं, और हटाने पर या नहीं घटना को इस तरह जोड़ा नहीं गया था। – davin

उत्तर

10

आप addEventListener और removeEventListener में close समारोह बुला रहे हैं जब आप पारित करने के लिए कोशिश कर रहे हैं एक तर्क (अनंत लूप के कारण) के रूप में है। इसके बजाय आप बस के रूप में इस समारोह के संदर्भ में पारित करना चाहिए:

document.getElementById($type).addEventListener("click", l.close, false); 

और:

document.getElementById($type).removeEventListener("click", l.close, false); 
+0

धन्यवाद। :) लेकिन तीसरा पैरामीटर क्या कर रहा है? –

+1

@ क्रॉलोवच यह परिभाषित करता है कि हैंडलर को कैप्चरिंग या बबलिंग चरण के दौरान निष्पादित किया जाना चाहिए: http://www.quirksmode.org/js/events_order.html – Lycha

0

या आप ही नाम के दो जावास्क्रिप्ट कार्यों हो सकता है।

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