Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ricardo Pereira

Jquery evento em novo elemento DOM

Mensagens Recomendadas

Ricardo Pereira

$(document).ready(function(){
 $("#items_list a").click(function(){
   $("#items_list_trade").append($(this));
 })
 $("#items_list_trade a").click(function(){
   $("#items_list").append($(this));
 })
})

Inicio a pagina com varios elementos <a> na div #items_list, e quando clico ele muda para a div #items_list_trade.

E depois eu queria que ao clicar na div #items_list_trade fizesse o percurso inverso, mas os elementos que foram mudados não reagem ao evento, e gostaria de saber como solucionar..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo Pereira

Vou mostrar um exemplo.

<div id="items_list">
 <a></a>
 ...
 ...
</div>
<div id="items_list_trade">
</div>

Depos ao clicar na tag <a>, o elemento passaria para a div #items_list_trade e quando eu clica-se no elemento que foi movido, que ele volta-se á sua div de origem, mas isso não se sucede. Só um elemento <a> que já se encontre presente na div #items_list_trade é que executa o evento.:

$("#items_list_trade a").click(function(){
 $("#items_list").append($(this));
})

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Penso que precisas de usar o on( ) para elementos adicionados dinamicamente.

Qualquer coisa deste género:

$(document).on( 'click', '#items_list_trade a', function () {
  $("#items_list").append($(this));
});

$(document).on( 'click', '#items_list a', function () {
  $("#items_list_trade").append($(this));
});

  • Voto 2

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Pelo que percebi, o elemento que fica com o evento tem que existir quando registas o evento. No entanto, o elemento #items_list_trade a é adicionado dinamicamente, e como tal não vai ficar com o evento associado.

Já no código que indiquei, o on fica associado ao $(document), que já existe à partida. Em vez do $(document), penso que até era melhor usar um outro elemento mais interno, como uma div que inclua essas duas divs que mostraste, e que exista logo à partida.

Penso que uma outra alternativa passaria por registar o evento dentro da função que adiciona o elemento, i.e., logo depois de chamares o append. Pouco percebo de jQuery, pelo que não te sei dizer qual a solução mais aconselhável.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.