Jquery Client Error

Estou tentando fazer um append() com jquery na view da seguinte forma:

Yii::app()->clientScript->registerScript(‘parcelasJS’, "

$('#btnAdd').click(function(){


   $('ul').append('<li><input type="text" /><a href="#">Excluir</a></li>'); 


    return false;


});





$('.btnExcluir').click(function(){


   $(this).parent().hide();


   return false;


});

",CClientScript::POS_READY);

<a id="btnAdd" href="#">Add Linha</a>

<ul>

&lt;li&gt;&lt;input type=&quot;text&quot; /&gt;&lt;a class=&quot;btnExcluir&quot; href=&quot;#&quot;&gt;Excluir&lt;/a&gt;&lt;/li&gt;

</ul>

Até aí ta tudo bem. Quando eu clico em ‘Add Linha’ sempre funciona, porem, todas as linhas que são inseridas passam a nao interpretar mais meu codigo js. Por exemplo, depois eu eu cliquei em ‘Add Linha’, resultaria o seguinte:

<ul>

&lt;li&gt;&lt;input type=&quot;text&quot; /&gt;&lt;a class=&quot;btnExcluir&quot; href=&quot;#&quot;&gt;Excluir&lt;/a&gt;&lt;/li&gt;&#60;&#33;--linha 1--&#62;


&lt;li&gt;&lt;input type=&quot;text&quot; /&gt;&lt;a class=&quot;btnExcluir&quot; href=&quot;#&quot;&gt;Excluir&lt;/a&gt;&lt;/li&gt;&#60;&#33;--linha 2--&#62;

</ul>

O que acontece é que se eu clicar no ‘Excluir’ da linha 2 nd acontece. E se eu clicar no ‘Excluir’ da linha 1 funciona normalmente e da um hide() na primeira linha. Exatamente isso, o botao de excluir só funciona na primeira <li>, nas demais que são inseridas pelo append() nao funciona.

O que acontece? Pq o script para de funcionar?

É como se o append() colocasse a minha <li>[…]<li> em formato de texto, e nao de HTML. E com isso o javascript nao interpreta aquela linha.

Alguma luz?

Tenta através da variável this pegar o elemento subjacente do a.

E:nth-child(n): em um elemento E, pega o elemento n de seu pai.

Eu descobri o seguinte: que usando dessa forma não funciona -> $(’#btnAdd’).click(function(){ , mas quando troquei para isso -> jQuery(’#btnAdd’).live(‘click’,function() { funcionou perfeitamente.

Muito estranho, mas enfim… resolvi o problema.

Marco,

Normalmente o click() funciona com elementos já renderizado, por isso não funcionava.

Já o live() ele pega os elementos renderizado e criado, uso sempre o live() na CGridView, quando a páginação é dinâmica (ajax).

Doc.: http://api.jquery.com/live/

Você pode usar o on() também.

Doc.: http://api.jquery.com/on/