0

J'ai un problème lié jQuery draggable et droppable. Voici une description de ce que je veux faire.jQuery draggable et le numéro de dépôt

Première: J'ai deux divs. L'un est <div id="selected"> et l'autre est <div id="container">. "conteneur" a 30 <li> qui sont déplaçables et droppable dans "sélectionné". Voici le code:

<div id="selected"> 
    <ul class="sortable-list"> 
    </ul> 
</div> 


<div id="container"> 
    <ul class="sortable-list"> 
      <li>1</li> 
      <li>2</li> 
      <li>....</li> 
      <li>29</li> 
      <li>30</li> 
    </ul> 
</div> 

Deuxième: Je veux permettre à tous les 10 <li> s de "conteneur" à "sélectionné" div. Si quelqu'un essaie d'ajouter le 11ème <li>, il ne doit pas autoriser l'utilisateur à le faire. C'est le 11ème <li> qui va être inséré dans "selected" qui doit être annulé en utilisant l'option jQuery draggable revert.

c'est-à-dire $("#container li").draggable({ revert: true }); Voici le code javascript pour cela.

$(document).ready(function(){ 

    var total = 0; 
    $("#selected").droppable({ 
     drop: function() { 
       total = $("#selected li").length; 
       //alert(total); 
       if (total >= 10) { 
        $("#container li").draggable({ revert: true }); 
       } else { 
        //$("#container li").draggable({ revert: false }); 
       } 
      } 
    }); 
}); 

Cela fonctionne très bien.

Troisième: Mais quand je fais glisser un <li> de « sélectionné » pour « conteneur », le « sélectionné » div aura seulement 9 <li> s. Donc, dans cette situation, plus tard, l'utilisateur devrait être en mesure d'ajouter un autre <li> dans div "selected" de div "conteneur". Mais malheureusement, cela ne fonctionne pas. Tous les <li> s que j'essaie de faire glisser et déposer dans "selected" sont en cours de restauration en raison de la condition if (total >= 10).

Quelqu'un peut-il m'aider à résoudre ce problème? S'il vous plaît ...

Répondre

1

Je voudrais suggérer d'utiliser des sortables, car c'est en quelque sorte la même chose comme des draggables et des droppables sur les deux div.

Ce n'est pas très diffcult avec les sortables, il y a un événement de réception. Observez cet événement et comptez le nombre de li à l'intérieur de #selected, s'il y a plus que ce qui est autorisé, vous pouvez annuler le tri en cours.

Fiddle: http://jsfiddle.net/doktormolle/K7kDz/

+0

Hey man, ce qui est grand. Vraiment génial. Merci. – gautamlakum

+0

J'ai un problème avec ça. Quand j'essaie d'ajouter 11ème élément li dans selected, il fait de l'espace pour 11th li et ensuite après il renvoie à conteneur div. Donc, il semble que cela permet d'ajouter 11 li. Alors que devrions-nous faire ici. En utilisant revert, il n'autorise pas l'espace pour ajouter 11ème élément li.Mais d'une manière ou d'une autre, ça devient bizarre après l'ajout de selected à div conteneur. – gautamlakum

+0

Vous avez différentes options. Par exemple, vous pouvez ajouter une classe à #selected si elle contient 10 li-elements. Cette classe peut être utilisée pour éviter que l'espace réservé ne prenne de l'espace (la classe de l'espace que vous voyez est "ui-classable-placeholder"). Bien sûr, vous devez supprimer cette classe, si moins de 10 li sont trouvés. –

0

d'abord - Je crois que vous devriez faire l'UL droppable au lieu de la DIV, sinon vous allez finir en dehors de l'UL (vous pouvez styler l'UL pour remplir tout DIV, donc il faudra déclenche toujours la partie largable lorsqu'un élément est au-dessus)

$("#selected ul.sortable-list").droppable({ 
    ...... 
}); 

deuxième et troisième - vous avez la partie ELSE où vous définissez false revenir en commentaire ... est-ce juste pour cet exemple ou avez-vous oublié le commentaire là-bas? (Ce qui serait la raison pour laquelle il ne fonctionne pas)

} else { 
    // $("#container li").draggable({ revert: false }); 
} 

aussi - avez-vous essayé Firebug pour vérifier que vous n'avez pas vraiment ces dans la DIV LIs sélectionnée une fois que vous les faites glisser sur?