2012-02-29 77 views
8

我有一個問題未捕獲的RangeError:最大調用堆棧大小超出,JavaScript的

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 
    } 

我做錯了什麼?如果沒有這個click事件偵聽一切運作良好。什麼是第三個參數做(TRUE | FALSE)?謝謝。

+0

https://developer.mozilla.org/en/DOM/element.removeEventListener你是否希望事件偵聽器來使用事件捕捉(如反對鼓泡)上添加第三參數標誌,並去除是否不是事件被添加爲這樣。 – davin 2012-02-29 11:04:32

回答

10

當您嘗試傳遞參數(導致無限循環)時,您正在調用close函數addEventListenerremoveEventListener。相反,你應該參照簡單地傳遞給函數如下:

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

和:

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

謝謝。 :)但是第三個參數在做什麼? – 2012-02-29 11:19:22

+1

@Krylovech它定義,如果處理程序應捕獲或冒泡階段期間執行:http://www.quirksmode.org/js/events_order.html – Lycha 2012-02-29 11:31:11

0

或者你可能有兩個同名的JavaScript函數。

相關問題