2010-03-13 20 views
8

Ho una tabella di pianificazione Sto usando jQuery Sortable per la modifica.jQuery Sortable - Limita il numero di elementi nell'elenco

Ogni giorno è un UL e ogni evento è un LI.

mio jQuery è:

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

Per rendere ordinabile tutti di LI ad eccezione di quelli con classe (i nomi dei giorni) "lith". L'utente può trascinare un evento da un giorno all'altro o aggiungere nuovi eventi facendo clic su un pulsante, che aggiunge un nuovo evento trascinabile (LI) al pugno UL (domenica).

Voglio rendere ogni giorno accetta solo fino a 10 eventi. Come faccio a fare questo?

Grazie in anticipo!

risposta

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

Questo è grande, grazie! Un piccolo problema - non conta gli elementi aggiunti dinamicamente - cioè conta come gli oggetti mani sono nell'UL quando la pagina viene caricata, e se elimino gli elementi non ricalcola ... Qualche idea per risolvere questo? –

+0

Sto parlando del primo methid ovviamente (quando si trascina, non quando si aggiunge un elemento). Grazie –

+0

ok ok, ho capito! ;-) nessun problema, ma, per farlo funzionare dinamicamente, devi ricaricare la pagina tramite ajax usando anche jquery! –

10

avere il fuoco funzione ogni volta che si tenta di trascinare un nuovo elemento in un elenco specifico (dinamico) è necessario utilizzare on() anziché il metodo 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'); 
     } 
    }); 

}); 
Problemi correlati