2012-03-07 95 views
1
$.each(data, function(i,data) { 
...[cut]... 
    +"<a id=\"contact_"+data.id+"_delete\" href=\"/user/contact/delete/ticket_id/"+data.ticket_id+"/contact_id/"+data.id+"\">Delete</a>" 
...[cut]... 
    $("#contact_"+data.id+"_delete").live('click',function() { 
     var href = this.attr('href'); 
     alert(href); 
     return false; 
    }); 

我有下面的代码示例(为简单起见切出不相关的部分)。我拥有的是一个重绘表格行(tr's)的函数。每行都在调用url/user/contact/delete/ticket_id/{$ ticket_id}的行末尾有一个'delete'链接然后(在同一个循环中),我想绑定一个click事件到新创建的链接。但是,当我点击链接时,浏览器离开页面并转到网址,而不是转到点击链接功能。问题绑定事件动态创建元素与jQuery

首先,我是否正确地绑定了点击事件?

其次,我是否正确检索元素的'href'属性?

+0

你使用jQuery 1.7吗? – 2012-03-07 21:13:02

+0

此刻:1.3.0(google cdn) – 2012-03-07 21:15:00

+0

fyi,我将其更改为1.7.1,并且仍然得到相同的结果 – 2012-03-07 21:16:24

回答

3

除了什么@charlietfl说,你可以有一个处理程序的所有删除元素。只要将相同的类添加到所有的人,像class="contact_delete",然后用.on()目标个个:

+'<a class="contact_delete" id="contact_'+data.id+'_delete" ... 

注意,如果使用单引号,您不必逃避所有的双引号。

$('body').on('click', '.contact_delete', function() { 
    var href = $(this).attr('href'); 
    alert(href); 
    return false; 
}); 
+0

好吧,照顾它,有时候,我认为在我处理碎片时需要线性化,但要处理元素。我忘了退一步,偶尔看看大图。我不确定为什么当我返回false时,它是通过“链接”页面进行的,但通过移动事件并将事件附加到身体上,这很好,谢谢你和@charlietfl – 2012-03-07 21:59:35

+0

以及@ DanielWhite也是如此 – 2012-03-07 22:01:56

2

你需要用“本”在$(),以使其成为一个jQuery对象,以便使用jQuery方法

var href = $(this).attr('href'); 

现场()被弃用(但是在1.7.1工作),所以你应该考虑使用更多的on()方法

相关问题