添加jQuery点击事件dynamic添加内容

我有一个由多个行和列填充由PHP和MySQL的表。 对于某些td,我在document.ready函数中添加了jQuery click事件,让用户更改内容。

但是我也可以select向表中添加行并手动填充它们。 但是由于我添加的行不在文档中,所以他们不会得到附加的click事件处理程序,所以我不能点击它们来获取input框。

<table> <tr> <td class="clickable">Some info</td> <td class="clickable">Some more info</td> <td>Unchangable info</td> </tr> ... more similar rows ... </table> 

然后是jQuery

 $("tr.clickable").click(function() { //add input fields } $("span#addNewRow").click(function() { $("table").append('<tr><td class="clickable"></td> ... </tr>') } 

你想要使用在1.3中引入的实况事件 。

 $("tr.clickable").live("click", function() { //add input fields }); $("span#addNewRow").live("click", function() { $("table").append('<tr><td class="clickable"></td> ... </tr>') }); 

更新:请注意,从jQuery 1.7开始, live()已被弃用。 用on()代替。 在某些情况下, delegate()可能是更好的select。 请参阅下面的评论。

如何使用.on()示例:

 $("table").on("click", "tr.clickable", function() { //add input fields }); 

您可以使用.delegate()函数,该函数根据特定的一组根元素,将处理程序附加到与select器匹配的所有元素的一个或多个事件,现在或将来。

使用实时事件处理程序。 它不处理所有的事件,但它处理了点击事件。 处理程序将被绑定到与select器匹配的所有当前和将来的元素。

 $('tr.clickable').live( 'click', function() { ... }); 

插入元素后,您将不得不添加事件侦听器。

如果您使用JQuery,则可以使用jQuery库livequery ,它允许您将事件添加到尚未在dom中的元素,以便在向dom中插入新的东西时不必重新绑定事件。