2011-12-31 33 views
2

工作我使用jQuery(1.6.2)的旧版本,似乎无法获得委托的工作。我有一个列表,我试图用一个单击事件委托,但它重新加载列表后失败。jQuery的委托不具有列表项

这里是我当前的代码:

$(".image_result").delegate("li", "click", function() { 

//$('.image_result li').click(function() { 
    var imgInfo = $(this).attr('id').split(':'); 

    if(confirm('Are you sure you want to delete this image?')) { 
     $.post('delete_image.php?image_id=' + imgInfo[0] + '&user_id=' + imgInfo[1], function(data) { 

      if (data.st) { 
       var resp = data.html.split("|"); 

       $('#imageStats').html(resp[0]); 
       $('#imageTable').html(resp[1]); 
      } 
      else { 
       alert("Yikes, something went wrong"); 
      } 
     }, "json"); 
    } 
}); 

的imageTable格设置现在拥有新的列表项(image_result)

我缺少什么?

+0

你可以张贴HTML结构以及 – frictionlesspulley 2011-12-31 02:59:47

+0

当你重新加载列表,你清理掉,并重新建立LIS,或者是你破坏并重新创建.image_result元素? – 2011-12-31 03:01:57

回答

4

.delegate()的关键是你不能销毁/替换jQuery对象中的项目(在这里是.image_result。这样做会杀死你的jQuery事件处理程序。你在jQuery对象中使用的选择器必须是静态的。破坏或更换)

在你的情况,并假设.image_result#imageTable一个孩子,你也许可以用这个来代替:

$("#imageTable").delegate(".image_result li", "click", function() {...}); 

因为#imageTable是没有得到更换所以它的事件处理程序生存更改子对象和th e选择器作为参数传递给.delegate()零在右边的li对象。

+0

这是问题所在。在父分区工作的设置代理。我没有意识到这一点。非常感谢...我每天都会学到东西:) – Paul 2011-12-31 03:06:02