Pessoal, escrevi esse código simples para adicionar e remover linhas. As linhas são adicionadas somente a partir do primeiro link, os demais que foram adicionados dinamicamente não funcionam. Alguém sabe o que está errado nesse código?
[code]
Adicionar linha
<script>
$(document).ready(function(){
$('a.add').on('click', function(){
var row = "<tr><td>Nova coluna</td><td><a href='#' class='add'>Add</a></td><td><a href='#' class='remove'>Remove</a></td></tr>"
$(this).closest('table').append(row);
});
$('a.remove').on('click', function(){
$(this).closest('tr').remove();
});
});
</script>
[/code]
Caras, eu tinha pesquisado bastante e não tinha achado. Logo após eu postar aqui, continuei buscando mais um pouco e achei o erro!
Eu substitui a linha:$('a.add').on('click', function(){por$(document).on('click', 'a.add', function(){
E a linha:$('a.remove').on('click', function(){por$(document).on('click', 'a.remove', function(){
Parece que o “on” não funciona para elementos adicionados dinamicamente, por isso tem que usar o “document” e especificar o elemento dentro do “on”.
Bom, acho que isso. Se alguém tiver uma explicação mais detalhada do porquê isso acontece, posta aí! 
Isso acontece porque o evento em javascript só funciona para elementos que o javascript já “sabe” que existam.
Por exemplo, eu tenho um botão com a class = ‘botaoclicavel’
Se eu fizer um evento do tipo:
$(’.botaoclicavel’).click(function(){
// faz qualquer coisa
});
Este evento irá monitorar os elementos com a classe “botaoclicavel”, e quando o evento ocorrer, ou seja, o usuário clicar no botão. O método será executado.
Acontece que se eu adicionar um outro botão dinamicamente após o carregamento deste javascript, esse javascript não irá conhecer este novo botão, e o evento não irá funcionar.
Quando isso acontece comigo, geralmente eu separo o evento em um método, e sempre chamo este método depois do elemento novo ser criado.
Mas se a solução do amigo aí acima funcionar, acredito que fique bem melhor do que a maneira que eu faço.
Valeu.
qdo eu preciso usar jquery em conteudo carregado dinamicamente eu faço assim :
var script = document.createElement(“script”);
script.type = “text/javascript”;
script.src = “…/…/js/jquery.js”;
document.getElementsByTagName(‘head’)[0].appendChild(script);
Insiro esse código dentro da função que será executada ao clicar m algum botão ou link.
Isso faz com que o jquery seja carregado novamente ao dom e assim o conteúdo carregado dinamicamente é reconhecido.
[quote]Parece que o “on” não funciona para elementos adicionados dinamicamente, por isso tem que usar o “document” e especificar o elemento dentro do “on”.
Bom, acho que isso. Se alguém tiver uma explicação mais detalhada do porquê isso acontece, posta aí! [/quote]
É que antigamente tínhamos:
[list] a função “click” e a função “bind” que registravam eventos diretamente sobre elementos pre-existentes.[/list]
[list] a função “live” e a função “delegate” que registravam eventos diretamente sobre elementos pre-existentes e futuros.[/list]
Após a versão 1.7 senão me engano, introduziram a função “on” e a recomendação para usa-la.
equivale a usar:
Por outro lado
equivale a usar o delegate
Uma dica: tente não usar o “on” com document como em:
Isso faz o jquery checar até a raíz do documento do DOM, diminuindo assim a performance. 
Se puder tente fazer como abaixo.
abs!