jQuery委托问题

时间:2010-08-16 17:20:32

标签: jquery delegates load

这是我关于SO的第一个问题,所以如果它看起来很愚蠢,请放轻松我。我有一个页面,其中包含一些图片列表,其中包含要删除的链接,并且可以添加更多图片。在每个事件之后(如下所示加载#user_gallery,我必须点击两次删除链接才能使用。为什么会这样?

$('body').delegate(".delete", "click", function(e){
        $('.delete').click(function(ev){
           var pic_id = $(this).attr('id').replace('pic_', '') ;
           $.post(   'unpublish_pics.php',
                     {pic: pic_id, action:'delete'},
                     function(data)
                     {                            
                            $('#user_gallery').load("pictures_display.php");
                     },"json"
                 );
           ev.preventDefault();
        });
        e.preventDefault();
   });

html就是这样的。

<div id="user_gallery">    
<div class="image">
   <a rel="gallery" class="img" href="pic.png"><img src="pic.png"></a>
    <a id="pic_1" class="ui-state-default ui-corner-all delete" href="#">Delete</a>
</div>

1 个答案:

答案 0 :(得分:4)

你下面不需要那个.click()处理程序/包装器,只需要这样的.delegate()

$('body').delegate(".delete", "click", function(e){
  var pic_id = $(this).attr('id').replace('pic_', '');
  $.post('unpublish_pics.php', {pic: pic_id, action:'delete'}, function(data) {                            
    $('#user_gallery').load("pictures_display.php");
  },"json");
  e.preventDefault();
});

目前,您正在为下一次点击绑定.click()处理程序...如果您想在点击时执行操作,只需将代码放在.delegate()处理程序中。