2010-03-13 7 views
8

J'ai un tableau de planification J'utilise jQuery Sortable pour l'édition.jQuery Sortable - Limiter le nombre d'éléments dans la liste

Chaque jour est un UL, et chaque événement est un LI.

Mon jQuery est:

$("#colSun, #colMon, #colTue, #colWed, #colThu").sortable({ 
     connectWith: '.timePieces', 
     items: 'li:not(.lith)' 
    }).disableSelection(); 

Pour rendre la sortable tous LI sauf ceux avec classe "litho" (noms de jour). L'utilisateur peut faire glisser un événement au jour le jour, ou ajouter de nouveaux événements en cliquant sur un bouton, qui ajoute un nouvel événement déplaçable (LI) à la première UL (dimanche).

Je veux que chaque jour n'accepte que jusqu'à 10 événements. Comment est-ce que je fais ceci?

Merci d'avance!

Répondre

26
$(function() { 
    $(".sortables").sortable({ 
     connectWith: '.connectedSortable', 
     //receive: This event is triggered when a 
     //connected sortable list has received an item from another list. 
     receive: function(event, ui) { 
      // so if > 10 
      if ($(this).children().length > 10) { 
       //ui.sender: will cancel the change. 
       //Useful in the 'receive' callback. 
       $(ui.sender).sortable('cancel'); 
      } 
     } 
    }).disableSelection(); 
}); 
+0

Cela tombe bien, merci! Un petit problème - il ne compte pas les éléments ajoutés dynamiquement - c'est-à-dire qu'il compte les éléments mani dans l'UL lorsque la page se charge, et si je supprime des éléments, il ne recalcule pas ... Une idée pour résoudre ce problème? –

+0

Je parle du premier methid bien sûr (en faisant glisser, pas en ajoutant un élément). Merci –

+0

ok ok, j'ai compris! ;-) pas de problème, mais, pour que ça marche dinamiquement vous devez recharger la page via ajax en utilisant jquery! –

10

Pour avoir le feu fonction à chaque fois que vous essayez de faire glisser un nouvel élément dans une liste spécifique (dynamique), vous devez utiliser on() plutôt que la méthode receive:.

http://jqueryui.com/demos/sortable/#event-receive

$(function() { 
    $("#day1, #day2").sortable({ 
     connectWith: ".connectedSortable" 
    }).disableSelection(); 

    $("#day1").on("sortreceive", function(event, ui) { 
     if($("#day1 li").length > 10){ 
      $(ui.sender).sortable('cancel'); 
     } 
    }); 

}); 
Questions connexes