0

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

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

问题是 after 方法似乎无法识别 JQuery 本身生成的表行,但是当我使用纯 html 行对其进行测试时,它工作得很好。所以我想知道是否有像 live 这样的方法我可以使用而不是 after 或任何解决方法?

4

3 回答 3

1

live在 jQuery 1.7 中已弃用并在 jQuery 1.9 中删除。

如果您使用的是 jQuery 1.7 及更高版本,则应.on改为使用。

来自 jQuery 文档的片段:

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

委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。例如,此元素可以是模型-视图-控制器设计中视图的容器元素,或者如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。在加载任何其他 HTML 之前,文档元素在文档的头部是可用的,因此在此处附加事件是安全的,而无需等待文档准备好。

除了能够处理尚未创建的后代元素上的事件之外,委托事件的另一个优点是当必须监视许多元素时,它们的开销可能会大大降低。在其 tbody 中有 1,000 行的数据表上,此示例将处理程序附加到 1,000 个元素:

$("#dataTable tbody tr").on("click", function(event){
alert($(this).text()); });

委托事件方法仅将事件处理程序附加到一个元素,即 tbody,并且事件只需要冒泡一个级别(从单击的 tr 到 tbody):

$("#dataTable tbody").on("click", "tr", function(event){
alert($(this).text()); });

注意:委托事件不适用于 SVG。

要删除与 绑定的事件.on(),请参阅`.off()'

于 2013-08-26T11:44:51.623 回答
0

我不确定这是否是你想要的。 http://jsfiddle.net/qjbB7/

HTML:添加

<table id="myTable">
    <tbody>
        <tr><td>1</td></tr>
        <tr><td>1</td></tr>
        <tr><td>1</td></tr>
    </tbody>
</table>

JS:

$("#add").click(function addRow(){
    $('#myTable  tbody > tr:last').after('<tr><td>text</td></tr>');
});
于 2013-08-26T11:42:49.277 回答
0

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

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

如果您必须将任何方法绑定到行,则可以使用委托事件。

像这样:

function Method1(oRow)
{
    console.log(oRow);
}
$('#myTable  tbody').on('click','tr',function(){
    Method1(this);
});

这将适用于 tbody 内的每一行,因为我将 tbody 设置为检测点击的永久参考。

于 2013-08-26T11:37:48.403 回答