2010-07-06 8 views
14

Tengo una IU que usa pestañas dinámicas, por lo que el contenido se puede cargar en una pestaña y luego se puede cerrar y eliminar el contenido de la página.Necesito separar eventos en jQuery cuando elimino los elementos

Cuando cargo contenido en una pestaña adjunto muchos eventos a los elementos usando jQuery.

¿Qué sucede cuando elimino estos elementos de la página? ¿JQuery necesita saber?

Además, ¿Importa si adjunto un evento varias veces? Por ejemplo, en mi pestaña de carga podría adjuntar un evento usando un selector de clase como $('.submitButton').click(...). Pero es posible que ya tenga otras pestañas abiertas, que ya hayan adjuntado el evento submitButton. En este caso, volveré a adjuntar el mismo evento. hay algun problema con esto?

+0

Me gustaría saber por qué está adjuntando el mismo evento más de una vez a un elemento. Si está haciendo muchas vinculaciones/desvinculaciones, es probable que haya un mejor enfoque. – user113716

Respuesta

16

Si use los métodos de jQuery .remove() o .empty(), ellos limpiarán todos los eventos (y otros datos) que fueron asignados con jQuery.

De la documentación para remove():

Además de los propios elementos, todos los eventos ligados y datos jQuery asociados con los elementos son removidos.

y para vacío():

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 utilizas métodos de eliminación de API nativos, todos esos datos se mantendrán. Así que es mejor utilizar los métodos jQuery.

3

Si elimina un elemento con .remove(), se eliminan todos los eventos enlazados y los datos jQuery asociados con el elemento.

Aparte de .detach(), lo que eliminará el elemento del DOM, pero mantiene todos los datos y eventos en memoria asociada (que es útil si desea volver a introducir ese elemento en un momento posterior)

Cuestiones relacionadas