javascript - obtiene - ¿Se pierden los eventos en jQuery cuando elimina() un elemento y lo agrega() en otro lugar?
metodo on jquery (3)
Sí, el enfoque de jQuery con remove()
es desvincular todo lo vinculado con el propio bind
jQuery (para evitar fugas de memoria).
Sin embargo, si solo desea mover algo en el DOM, no tiene que remove()
primero. Solo append
al contenido de su corazón, las encuadernaciones de eventos se quedarán :)
Por ejemplo, pegue esto en su firebug en esta página:
$(''li.wmd-button:eq(2)'').click(function(){ alert(''still here!'') }).appendTo(document.body)
Y ahora desplácese hacia abajo hasta la parte inferior de esta página y haga clic en el pequeño icono globy ahora enterrado debajo del pie de SO. Recibirás la alert
. Todo porque tuve cuidado de no remove
primero.
¿Qué sucede en jQuery cuando elimina () un elemento y lo agrega () a otro lugar?
Parece que los eventos están desenganchados, como si solo estuvieras insertando un html nuevo (que supongo que es lo que está sucediendo). Pero también es posible que mi código tenga un error, así que solo quería verificar este comportamiento antes de continuar.
Si este es el caso, ¿hay alguna manera fácil de volver a conectar los eventos a esa porción de HTML, o una forma diferente de mover el elemento sin perder el evento en primer lugar?
La función jQuery detach () es igual que remove () pero conserva los manejadores de eventos en el objeto que devuelve. Si tiene que quitar el artículo y colocarlo en otro lugar con todo, puede usarlo.
var objectWithEvents = $(''#old'').detach();
$(''#new'').append(objectWithEvents);
Verifique los documentos API aquí: http://api.jquery.com/detach/
utiliza jQuery1.3.1 live () para vincular eventos y no tendrás que preocuparte por esto ...
Actualización: los eventos en vivo están en desuso ahora, pero puede obtener el mismo efecto de $ (documento) .on ().