Como clonar um evento jQuery Ouvir plugin?
-
21-08-2019 - |
Pergunta
Eu tenho alguns elementos <tr>
na minha página com um evento click()
anexado a uma imagem que fica dentro de cada um. Eu uso este código
$(this).clone(true).appendTo("table#foo");
para fazer o seguinte:
- copiar esses
<tr>
s em uma tabela diferente - preservar os eventos, clique nas imagens no interior dos
<tr>
s (por causa do argumentotrue
)
Tudo isso funciona bem. Agora eu adicionei um jQuery Ouça evento para aqueles <tr>
s, de modo que um usuário não tem para apontar com precisão:. ele / ela pode clicar em qualquer lugar na <tr>
e eu posso passar o clique para a imagem
É codificado como este:
$('tr.record').listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
O listen () evento funciona bem no item original, mas evento no item clonado, a ouvir () falhar. clique evento A imagem do ainda funciona bem.
Aqui está o Firebug diz-me:
m(this, e.type) is undefined
... e ele faz referência a linha 9 de jquery.listen-1.0.3-min.js.
Como posso pode fazer o trabalho evento listen () sobre os elementos clonados?
Atualização
Por padrão, jQuery não copia eventos em elementos clonados, mas este plugin é feito para fazer isso.
Enquanto isso, o autor do listen () plug-in sugeriu uma estratégia diferente - veja minha resposta abaixo
.Solução
Ariel Flesler, criador do plugin listen (), me deu este conselho via e-mail:
"Eu acho que isso pode ser resolvido de outra maneira. A idéia de Listen (e delegação de evento) é realmente evitar toda a cópia de eventos para novos elementos ".
"Você poderia simplesmente fazer:"
$('table#foo').listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
"Ou ainda:"
$.listen('click','td',function(){
$(this).parent().find("img.clickable").click();
});
"O primeiro exemplo vai usar a tabela como ouvinte. No 2º um, o
tag <html>
é usado. Portanto, não importa se você adicionar novos td / tr / tabelas. ele vai
ainda funcionam. "