2011-11-14 1 views
9

Tengo un elemento con muchos elementos secundarios. Quiero borrar el contenido de este elemento y reemplazarlo con una nueva estructura.Will jquery empty() método clear the event listeners creado a través de non jquery means

Los elementos secundarios se asignan con varios detectores de eventos y no todos esos oyentes se crean mediante el método de vinculación jquery.

Si utilizo el método vacío de jquery para borrar el elemento ¿eliminará todos los detectores de eventos o solo eliminará los oyentes creados a través del método de vinculación jquery?

Respuesta

0

no borrará los detectores de eventos. Pero debe utilizar este evento de oyentes como evento live(), porque está cambiando elementos DOM dinámicamente.

por ejemplo:

$('a').live('click', function(){ 
    // your stuff 
}); 

// jQuery 1.7 requerido para la siguiente fragmento de código

$(document).on('click', 'a', function(){ 
    // your stuff 
}); 
+4

Esta respuesta contradice la documentación: http://api.jquery.com/empty/ "Para evitar pérdidas de memoria, jQuery elimina otras construcciones tales como datos y controladores de eventos de los elementos secundarios antes de retirar los elementos mismos Si. desea eliminar elementos sin destruir sus datos o controladores de eventos (para que puedan volver a agregarse más adelante), utilice .detach() en su lugar ". – umassthrower

3

Puede desvincular todos los oyentes de un objeto con el .unbind() y dejar a los parametros vacío

Si desea eliminar todos los elementos secundarios de un elemento. solo usuario $ ("# parent"). children(). remove();

Con la vivo() y die() métodos manejadores de sucesos puede agregar a elementos que no lo hacen todavía existe todavía. con $ (". element"). live ("click", function() {}) agrega una función a todos los objetos .element que están actualmente en su HTML o aquellos que se agregan en el futuro.

+7

La documentación de Jquery vacía() indica esto. "Para evitar fugas de memoria, jQuery elimina otras construcciones, como datos y controladores de eventos de los elementos secundarios antes de eliminar los elementos ellos mismos". ¿No debería invocar el método empty() entonces? ¿Por qué tengo que invocar desvinculación? – Mandai

+2

Sí, de hecho, .empty() hará todo lo anterior por itselve, a cada niño. Si está utilizando .empty() no necesita llamar a .ubind() usted mismo. Desvinculará eventos y borrará todos los datos guardados dentro de los nodos. – Niels

12

Como han mencionado varios comentaristas, la documentación de jQuery decir que vacía() lo elimina de hecho los controladores de eventos: http://api.jquery.com/empty/

Tal vez ese no era el caso cuando esta cuestión fue publicada, pero esta página es la primera golpeado en Google.

+0

Acabo de experimentar esto, jQuery 1.12 'empty()' de hecho elimina los oyentes. – Risadinha