2010-08-12 12 views
7

Soy un desarrollador de actionscript que entra en el desarrollo de jquery/javascript. Tengo una pregunta sobre los controladores de eventos y la vinculación/desvinculación.Manipuladores de eventos de limpieza de JQuery

Digamos por ejemplo que tengo para un div con un elemento img con un controlador de eventos onerror en él. Si reemplazo ese div con uno nuevo, necesito quitar el eventhandler vinculado al elemento img. Como la img ya no estará en el documento, ¿los navegadores serán lo suficientemente inteligentes como para eliminarlo o tendré una pérdida de memoria provocada?

Viniendo de actionscript, por lo general trato de eliminar constantemente antiguos manejadores de eventos. Entonces, ¿necesito hacer esto cuando escribo javascript para navegadores web?

Los controladores de eventos se añaden con $('imgElement').error(errorFunction);

+0

¿Cómo se agregan los controladores de eventos? –

Respuesta

10

Si va a la unión de los eventos con jQuery sólo llamar .remove() en el elemento de edad antes de reemplazarlo, o .empty() si lo que desea para desactivarla, ambos limpiar los controladores de eventos para el elemento y es niños, o en t El caso de .empty(), solo los niños.

Si simplemente lo reemplaza, p. .html(content) usted memoria de pérdida, ya que cualquier manipulador o datos para esos elementos se dejarán en el objeto $.cache.

+2

¡No sabía que .html (contenido) perdería memoria! ¡Gracias! – Patricia

+0

¿Estás seguro? Mirando el código fuente de jQuery, la línea 203 de manipulation.js: "// Elimina los nodos de elementos y evita fugas de memoria" – Phil

+0

@ phil- Si observa el código anterior, verá que hay varias condiciones establecidas que determinan si ese código se ejecuta :) SO Chat tuvo el mismo problema de pérdida de memoria en la primera vista previa, esta fue la causa. –

0

tratar de usar firequery, es un complemento para Firefox que muestra todos los detectores de eventos activos y jquery.data()

También estoy curioso en cuanto a si se trata de las mejores prácticas para desenlazar() eventos ...

Cuestiones relacionadas