2010-08-12 20 views
7

Sono uno sviluppatore di script che entra nello sviluppo jquery/javascript. Ho una domanda riguardante i gestori di eventi e il binding/unbinding.JQuery pulizia di eventhandlers

Dire ad esempio che ho per un div con un elemento img con un gestore di eventi onerror in esso. Se sostituisco quel div con uno nuovo ho bisogno di rimuovere l'eventhandler associato all'elemento img. Dal momento che l'img non sarà più nel documento, i browser saranno abbastanza intelligenti da rimuoverlo o avrò una perdita di memoria causata?

Proveniente da ActionScript in genere cerco di rimuovere costantemente i vecchi eventhandler. Quindi devo farlo quando scrivi javascript per i browser web?

I gestori di eventi sono aggiunti con $('imgElement').error(errorFunction);

+0

Come vengono aggiunti i gestori di eventi? –

risposta

10

Se stai vincolanti gli eventi con jQuery basta chiamare .remove() sul vecchio elemento prima di sostituirla, o .empty() se si desidera solo per cancellarlo, entrambi questi ripulire gestori di eventi per l'elemento e sono i bambini, o in t caso di .empty(), solo i bambini.

Se si sostituisce semplicemente, ad es. è perdita di memoria, come eventuali gestori o dati per tali elementi saranno lasciati sull'oggetto $.cache.

+2

non sapevo che .html (contenuto) avrebbe perso memoria! Grazie! – Patricia

+0

Sei sicuro? Guardando il codice sorgente di jQuery, manipulation.js linea 203: "// Rimuovi i nodi degli elementi e previene le perdite di memoria" – Phil

+0

@ phil- Se si guarda il codice prima, vedrai che ci sono diverse condizioni che determinano se quel codice viene eseguito :) SO Chat ha avuto la stessa perdita di memoria nella prima anteprima, questa era la causa. –

0

provare a utilizzare firequery, è un plugin per Firefox che mostra tutti i listener di eventi attivi e jquery.data()

Sono anche curioso di vedere se si tratta di buone pratiche per svincolare() eventi ...