2012-02-29 13 views
8

Ho un problemaUncaught RangeError: Dimensione massima stack di chiamate superato, 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 
    } 

Quello che sto facendo di sbagliato? Senza questo listener di eventi click tutto funziona bene. E che cosa fa il terzo parametro (true | false)? Grazie.

+0

https://developer.mozilla.org/en/DOM/element.removeEventListener il terzo parametro indica se si desidera che il listener di eventi utilizzi l'acquisizione di eventi (come opporsi al bubbling) all'aggiunta e alla rimozione se o non l'evento è stato aggiunto come tale. – davin

risposta

10

Si sta chiamando la funzione close nello addEventListener e removeEventListener quando si tenta di passare come argomento (causando un ciclo infinito). Invece si dovrebbe semplicemente passare il riferimento alla funzione come segue:

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

E:

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

Grazie. :) Ma cosa sta facendo il terzo parametro? –

+1

@Krylovech Definisce se il gestore deve essere eseguito durante la fase di cattura o bubbling: http://www.quirksmode.org/js/events_order.html – Lycha

0

Oppure si potrebbe avere due funzioni JavaScript con lo stesso nome.

Problemi correlati