将javascript绑定到新行

时间:2012-03-04 18:42:12

标签: javascript jquery

我有一个简单的表格,其中显示了一些信息。要查看该行的详细信息,我有一个javascript函数:

$('#production tr').bind("click", function(){
    reviewProductionOrder(this);
});

这让我可以选择行并显示相应的信息。但是我在顶部有一个日期选择器,相应地过滤结果

$('#view').bind("click", function(){
    var from_date = $('#from_date').val();
    var to_date = $('#to_date').val();

    $.ajax({
         type : "post", url : "data.php", data : "from_date=" + from_date + "&to_date=" + to_date,
         success : function(data) {
         if(data != '')
             $('#production tbody').html(data);
         }
    });
});

上面的功能让我可以将数据添加到表中。现在我认为bind会让我将javascript函数绑定到新生成的行。但是,当我点击这些行时,我无法这样做。

2 个答案:

答案 0 :(得分:3)

使用on()

$('#production').on('click' , 'tr', function() {
    // your processing here
});

$(document)部分必须是您要在on() doc页面上监听活动的元素的父元素:

  

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

答案 1 :(得分:0)

你有两种方法可以做到这一点。首先,您需要知道只能绑定现有DOM对象上的事件。因此,当您首先绑定时,绑定现有元素,而不是您要创建的新元素。为了绕过它,jQuery具有与.bind完全相同的功能“.live”,但在初始调用之后继续在DOM对象上应用它。该功能的主要问题是速度较慢。如果你有很多动态的javascript和动画,差别很大,但是没有任何变化就是页面上只有1个表。您还可以在新的附加对象上重新绑定事件,说明您对ajax调用的响应是纯HTML,例如,您可以这样做:

 $('#production tbody').html(data).find('#production tr').bind("click", function(){
    reviewProductionOrder(this); })

这样,您可以在附加事件后绑定事件。

希望它有所帮助。