2010-08-16 4 views
0

Ceci est ma première question sur SO, donc s'il semble plus que stupide, s'il vous plaît, prenez-le doucement sur moi. J'ai une page avec une liste d'images avec des liens pour la suppression en dessous d'eux et avec la possibilité d'ajouter plus de photos. Après chacun de ces événements (qui fait une charge #user_gallery comme ci-dessous, je dois cliquer deux fois sur le lien Supprimer pour que cela fonctionne. Pourquoi?Problème de délégué jQuery

$('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(); 
    }); 

Le html est va quelque chose comme ça.

<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> 

+0

À quoi ressemble le html? – treeface

Répondre

4

Vous n'avez pas besoin de ce gestionnaire/emballage .click() en dessous, juste le .delegate() comme ceci:

$('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(); 
}); 

Actuellement vous liez un gestionnaire .click() pour le clic suivant ... si vous voulez effectuer une action lorsque vous cliquez dessus, placez le code directement dans le gestionnaire .delegate().

+0

Oui, ça a fait l'affaire. Cela semble assez logique aussi, merci beaucoup. – dragosplesca

Questions connexes