Pregunta

Por ejemplo, si tengo un vínculo con el siguiente evento ligado a ella:

$("a.d").bind("click", this, onDelete);

Y más tarde hacer:

$("a.d").remove();

Es que bien? ¿O se produce una pérdida de memoria y tengo que llamar primero unbind?

Gracias por cualquier ayuda.

¿Fue útil?

Solución

Yo no lo he probado, pero creo que la eliminación de un elemento va a desvincular sus controladores de eventos. Vengo a esta conclusión a partir de la jQuery documentación de la API (búsqueda de Remove) que establece que si desea mover un elemento de una parte del DOM a otro que:

$("#foo").remove().appendTo("#bar");

debería ser escrita como

$("#foo").appendTo("#bar");

para evitar la pérdida de los controladores de eventos.

Otros consejos

A partir de documentos de jQuery para remove ()

  

Elimina todos los elementos emparejados de la   DOM. Esto no puede servir de   el objeto jQuery, lo que permite utilizar   los elementos coincidentes más. Nota   que esta función a partir de 1.2.2   También se eliminarán todos los controladores de eventos   e internamente en caché de datos.

La respuesta es sí, siempre y cuando el evento se une con jQuery. Si se han conectado con algo como "onclick" no creo que lo hará.

En este artículo se analizan algunas de eso. También define una función recursiva para eliminar todos los eventos de clic de un elemento y todos sus hijos. Se tratarán los manipuladores clic jQuery, así como los manipuladores definidos con onclick por lo que está cubierto.

http: / /www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

function RecursiveUnbind($jElement) {
    // remove this element's and all of its children's click events
    $jElement.unbind();
    $jElement.removeAttr('onclick');
    $jElement.children().each(function () {
        RecursiveUnbind($(this));
    });
}

Para utilizar la función en el ejemplo anterior que podríamos llamar la función pasándole el div “contenedor” como un objeto jQuery.

RecursiveUnbind($('#container'));

Para el registro, usted no necesita preocuparse acerca de las pérdidas de memoria en JavaScript. (Hombre frío, no c ++!)

motor de JavaScript del navegador administra todos los objetos, y la basura los recoge. Cuando digo objetos, que significa control de eventos-funciones también, porque las funciones son también objetos en javascript.

Sin relación: Me encanta cómo todo es un objeto en javascript: D

Saludos!
JRH

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top