He creado una serie de eventos personalizados de jQuery para usar en aplicaciones web móviles. Funcionan muy bien y han sido probados. Sin embargo, me he encontrado con un pequeño problema que me cuesta entender.
Estoy usando .clone()
algunos elementos dentro del DOM, que contienen un botón. El botón tiene algunos de los eventos personalizados vinculados a él (los eventos están vinculados mediante .on()
), pero. Desafortunadamente, cuando uso jQuery's .clone()
, los enlaces no se conservan y tengo que agregarlos nuevamente.
¿Alguien se ha encontrado con esto antes, alguien sabe de un posible trabajo alrededor? Pensé que .on()
se suponía que el uso preservaba el enlace de los elementos que existen ahora o en el futuro.
javascript
jquery
BenM
fuente
fuente
.clone
; es la lógica de delegación de eventos de jQuery y funciona si pasa un selector adicional a.on
.Respuestas:
Creo que deberías usar esta sobrecarga del método .clone () :
Tenga en cuenta que en
.on()
realidad no vincula los eventos a los objetivos, sino al elemento en el que está delegando. Entonces, si tienes:Los eventos están realmente ligados a
#container
. Cuando se.button
produce un clic en un elemento, aparece el#container
elemento. El elemento que desencadenó el evento se evalúa en el parámetro selector de.on()
y, si coincide, se ejecuta el controlador de eventos. Así es como funciona la delegación de eventos.Si clona el elemento #container, debe realizar una clonación profunda con eventos y datos para
.on()
que se conserven los enlaces realizados .Esto no sería necesario si estuviera usando
.on()
en un padre de#container
.fuente
.clone()
argumentos aceptados. FML. Gracias por tu ayuda..clone()
no clonar.data()
(ambosdata-xxxx="somedata"
y los datos en el DOM). ¡Esto también lo soluciona!click
evento para agregar el nuevo div clonado.ready
no estaba funcionandoDebe tener en cuenta el hecho de que se agregó la funcionalidad de clonación profunda a la versión 1.5 de jQuery.
Más información sobre este tema:
http://api.jquery.com/clone/
fuente