对JQuery生成的元素使用JQuery.after方法

对JQuery生成的元素使用JQuery.after方法,jquery,html,Jquery,Html,我有jquery生成的表行,因为它们是动态生成的,所以我会使用任何带有.live方法的选择器来绑定事件。但是在绑定我的事件之后,我想附加更多的行,所以我使用了.after方法,如下所示 $("#addItem").live("click", function (e, index) { $('#myTable tbody > tr:last').after('<tr><td>' + Contenet + '</td></tr'>

我有jquery生成的表行,因为它们是动态生成的,所以我会使用任何带有.live方法的选择器来绑定事件。但是在绑定我的事件之后,我想附加更多的行,所以我使用了.after方法,如下所示

$("#addItem").live("click", function (e, index) {    
    $('#myTable  tbody > tr:last').after('<tr><td>' + Contenet + '</td></tr'>);
});

问题是after方法似乎无法识别JQuery本身生成的表行,但当我用纯html行测试它时,它工作得很好。所以我想知道是否有一种像live这样的方法,我可以用它来代替after或任何变通方法

尝试在TBODY中使用append,它将始终作为最后一行注入代码

$('#myTable  tbody').append('<tr><td>' + Content + '</td></tr'>);

这将适用于tbody中的每一行,因为我将tbody设置为一个永久引用来检测单击

我不确定这是否是你想要的。

HTML: 加

JS:

live在jQuery 1.7中被弃用,在jQuery 1.9中被删除

如果您使用的是jQuery1.7及更高版本,则应该使用

jQuery文档中的代码片段:

事件处理程序仅绑定到当前选定的元素;他们 在代码调用.on时,页上必须存在。 要确保元素存在并且可以选择,请执行事件 在文档就绪处理程序中为 页面上的HTML标记。如果新的HTML被注入到页面中, 选择元素并在创建新HTML后附加事件处理程序 放入页面中。或者,使用委派事件附加事件 处理程序,如下所述

委派事件的优点是,它们可以从中处理事件 以后添加到文档中的子元素。通过 选择一个元素,该元素保证在 已附加委派事件处理程序,您可以使用委派事件 避免频繁附加和删除事件处理程序。这 元素可以是视图中的容器元素 例如,模型视图控制器设计,或记录事件 处理程序希望监视文档中的所有冒泡事件。这个 文档元素在之前的文档头中可用 加载任何其他HTML,因此可以安全地在那里附加事件,而无需 正在等待文档准备就绪

除了处理后代元素上的事件的能力之外 尚未创建,委派事件的另一个优点是 当必须使用多个元素时,可能会产生更低的开销 监控。在tbody中包含1000行的数据表上,以下示例 将处理程序附加到1000个元素:

$dataTable tbody tr.onclick,functionevent{ 警报$this.text; };

委派事件方法附加了 事件处理程序只指向一个元素,即tbody,事件只需要 要从单击的tr向上冒泡一个级别,请执行以下操作:

$dataTable tbody.onclick、tr、functionevent{ 警报$this.text; };

注意:委派事件不适用于SVG


若要删除与.on绑定的事件,请参阅。

Live不推荐使用,请使用on如何绑定事件?不要忘记+前后冒号。我仍在使用jquery 1.8.3,因此我使用Live方法。感谢的可能重复,请确保它与之后一样,但问题是我有未知数量的行,这些行可能由tbody中的另一个方法生成,也可能不由tbody中的另一个方法生成。因此,当生成这些行时,这些方法不起作用。@altsyset添加了一个使用on方法的示例。如果您更喜欢使用live,那么应该将其绑定到您确信将在页面中的元素上。
function Method1(oRow)
{
    console.log(oRow);
}
$('#myTable  tbody').on('click','tr',function(){
    Method1(this);
});
<table id="myTable">
    <tbody>
        <tr><td>1</td></tr>
        <tr><td>1</td></tr>
        <tr><td>1</td></tr>
    </tbody>
</table>
$("#add").click(function addRow(){
    $('#myTable  tbody > tr:last').after('<tr><td>text</td></tr>');
});