2012-02-29 5 views
8

tengo un problemano detectada RangeError: El tamaño máximo de pila de llamadas superado, 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 
    } 

Lo que estoy haciendo mal? Sin este clic, el oyente del evento funciona bien. ¿Y qué está haciendo el tercer parámetro (verdadero | falso)? Gracias.

+0

https://developer.mozilla.org/en/DOM/element.removeEventListener el tercer parámetro indica si desea o no que el detector de eventos utilice la captura de eventos (como oposición al burbujeo) al agregar, y al eliminar si o no el evento fue agregado como tal. – davin

Respuesta

10

Está llamando a la función close en el addEventListener y removeEventListener cuando se está tratando de pasar es como un argumento (que causa un bucle infinito). En su lugar debe simplemente pasar la referencia a la función de la siguiente manera:

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

Y:

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

Gracias. :) Pero, ¿qué está haciendo el tercer parámetro? –

+1

@Krylovech Define si el controlador debe ejecutarse durante la fase de captura o burbujeo: http://www.quirksmode.org/js/events_order.html – Lycha

0

O puede que tenga dos funciones Javascript con el mismo nombre.

Cuestiones relacionadas