Eu criei uma série de eventos jQuery personalizados para uso em aplicativos da web móvel. Eles funcionam muito bem e foram testados. No entanto, encontrei um pequeno problema que não consigo entender.
Estou usando .clone()
alguns elementos dentro do DOM, que contêm um botão. O botão possui alguns dos eventos personalizados vinculados a ele (os eventos são vinculados com .on()
), mas. Infelizmente, quando uso o jQuery .clone()
, as ligações não são preservadas e tenho que adicioná-las novamente.
Alguém já encontrou isso antes, alguém sabe de uma solução alternativa? Eu pensei que o uso .on()
deveria preservar a ligação para os elementos que existem agora ou no futuro?
javascript
jquery
BenM
fonte
fonte
.clone
; é a lógica de delegação de eventos do jQuery e funciona se você passar um seletor adicional para.on
.Respostas:
Acho que você deve usar esta sobrecarga do método .clone () :
Esteja ciente de que
.on()
isso não vincula realmente os eventos aos destinos, mas ao elemento ao qual você está delegando. Então, se você tem:Os eventos estão realmente vinculados
#container
. Quando.button
ocorre um clique em um elemento, ele borbulha para o#container
elemento. O elemento que disparou o evento é avaliado no parâmetro seletor de.on()
e, se corresponder, o manipulador de eventos é executado. É assim que funciona a delegação de eventos.Se você clonar o elemento #container, terá que clonar profundamente com eventos e dados para as ligações feitas com
.on()
a serem preservadas.Isso não seria necessário se você estivesse usando
.on()
em um dos pais de#container
.fonte
.clone()
argumentos aceitos. FML. Obrigado pela ajuda..clone()
não clonar o.data()
(ambos osdata-xxxx="somedata"
dados e no DOM) .. Isso também corrige!click
evento para anexar a nova div clonada.ready
não estava funcionandoVocê deve estar ciente do fato de que a funcionalidade de clonagem profunda foi adicionada à versão 1.5 do jQuery.
Mais informações sobre este assunto:
http://api.jquery.com/clone/
fonte