Annuler le glissement d’un élément sortingable

Un cas sortingable absolument commun:

 $(function() { $("#sortable").sortable(); });  
  • Item 1
  • Item 2
  • Item 3

Problème. Il faut annuler le glissement d’un object à certaines conditions et Andrew Whitaker conseille vivement , mais cette approche ne fonctionne que pour jquery-ui-draggable et échoue pour les objects de sorting:

 $("#sortable").sortable({ start: function() { return false; // will still cause `this.helper is null` } }); 

Sera reconnaissant pour les suggestions.

Le rappel de la fonction de sort fait la même chose pour le sorting et le glissement pour le glissable ( démo ):

 $("#sortable").sortable({ sort: function() { if ($(this).hasClass("cancel")) { $(this).sortable("cancel"); } } }); 

Sortable a une capacité “cancel” appelée à l’aide de sortable('cancel') .

A partir de la documentation: “Annule une modification du sortingable actuel et la rétablit à l’état antérieur au début du sorting actuel.” Voir http://api.jqueryui.com/sortable/#method-cancel .

Exemple d’utilisation:

 $("#sortable").sortable({ stop: function(e, ui) { if ("I need to cancel this") { $(ui.sender).sortable('cancel'); } } }); 

Renvoyer false comme le suggère fudgey est très utile pour rendre les choses dynamicment non sortingables, mais il existe également une option d’ cancel dans la configuration pouvant être sortingée qui vous permet de configurer également les unsortables statiques:

 $("#sortable").sortable({ // this prevents all buttons, form fields, and elemens // with the "unsortable" class from being dragged cancel: ":input, button, .unsortable" }); 

Essayez cet exemple

 $ ('# list1'). sortingable ({
     connectWith: 'ul'
 });    

 $ ('# list2'). sortable ({
     connectWith: 'ul',
     recevoir: fonction (ev, ui) {
        if (ui.item.hasClass ("nombre"))
           ui.sender.sortable ("cancel");
     }
 });