2010-06-23 7 views
5

J'essaie de faire des changements de catégorie avec Jquery & Php. Je n'ai aucun problème avec ça. Mon problème est, lorsque l'événement de mise à jour est appelé, il retourne 2 résultats. 1 résultat pour Dragged Parent, One result for Dropped Parent. Je veux appeler uniquement l'ID du parent supprimé. Voici mon script:Jquery Sortable Update Event peut être appelé qu'une seule fois?

$("#gallery ul").sortable({ 
    connectWith: '.dropBox', 
    opacity: 0.35, 
    scroll: true, 
    scrollSensitivity: 100, 
    //handle: '.move', 
    helper: 'clone', 
    containment:'#gallery', 
    accept:'#gallery > .photo', 
    revert: true, 
    update: function(event, ui){ 
     params = 'c=' + $(this).attr('id') + '&id=' + ui.item.attr('id'); 

     $.ajax({ 
      type: 'POST', 
      url: 'processData.php', 
      data: params, 
      error:function(){ 
       alert("Error!"); 
      }, 
      success:function(data){ 
       $("#serverResponse").html(data); 
      } 
     }); 
    } 
}).disableSelection(); 

Pouvez-vous m'aider les gars?

Répondre

7

Utilisez update, stop et receive événements, par exemple

$(function() { 
    position_updated = false; //flag bit 

    $(".sortable").sortable({ 
     connectWith: ".sortable", 

     update: function(event, ui) { 
      position_updated = !ui.sender; //if no sender, set sortWithin flag to true 
     }, 

     stop: function(event, ui) { 
      if (position_updated) { 

       //code 

       position_updated = false; 
      } 
     }, 

     receive: function(event, ui) { 
      // code 
     } 

    }).disableSelection(); 
}); 
1

Vous devriez essayer de jouer avec les différents événements sortable

  • début
  • sorte
  • changement
  • beforeStop
  • arrêt
  • mise à jour
  • reçoivent
  • enlever
  • sur
  • sur
  • activer désactivent

Je suis sûr que l'un of'em sera votre réponse.

Source: http://jqueryui.com/demos/sortable/#event-change

3

ui.sender existe seulement dans le deuxième rappel.

$(".sortable").sortable({ 
    connectWith: ".sortable", 
    update: function (evt, ui) { 

     // just ignore the second callback 
     if(ui.sender == null){ 

      // call ajax here 

     } 


    }, 
    receive: function (evt, ui) { 

     // called after the first 'update' 
     // and before the second 'update' 
     // ui.sender is always exists here 

    } 

}).disableSelection(); 
+0

+1 excellent. C'était un peu un gratte-tête. Merci –

0

Il suffit de faire ceci:

update: function(event, ui) { 
      if(ui.sender) { 
      // Your actual code 
      } 
     }, 
Questions connexes