2010-12-01 53 views
2

J'ai deux listes pouvant être triées qui sont connectées. L'un est simplement sur la page, l'autre est dans un accordéon. (J'utilise l'accordéon comme un conteneur pour l'autre liste)Interface utilisateur jQuery: faites glisser Sortable de l'intérieur de l'accordéon vers l'extérieur

Mon but est tel qu'un utilisateur peut ouvrir l'accordéon et tirer des éléments de cette liste et sur la page.

Cela fonctionne - sauf que l'espace réservé disparaît à la sortie de l'accordéon. J'ai essayé helper: 'clone' et augmentant le zIndex.

Voici une version simplifiée du code:

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/redmond/jquery-ui.css" rel="stylesheet" type="text/css"/> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type="text/javascript"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 

    $(document).ready(function(){ 
     $("#inside").accordion({ 
       collapsible: true, 
       fillSpace: true, 
       active: false 
      }); 
     $("#ulOutsideList, #ulInsideList").sortable({ 
       opacity: 0.7, 
       revert: 100, 
       scroll: true, 
       helper: 'clone', 
       zIndex: 50000, 
       connectWith: ".connectedSortable",     
      }); 
    }); 
</script> 


    <div id="outside"> <!-- 1. Pick a Store --> 
     <ul id="ulOutsideList" class="connectedSortable"> 
     <li>outside 1</li> 
     <li>outside 2</li> 
     <li>outside 3</li> 
     </ul> 
    </div> <!-- end 1. Pick a Store --> 

    <div style="clear:both"></div> 

    <div id="inside"> 
     <h3>container</h3> 
     <ul id="ulInsideList" class="connectedSortable"> 
      <li>inside 1</li> 
      <li>inside 2</li> 
      <li>inside 3</li> 
     </ul> 
    </div> 

+0

Vous voulez donc faire glisser des éléments hors de l'accordéon et laisser des espaces réservés vides à leur place? –

Répondre

2

Dans votre appel triables vous souhaitez utiliser les options suivantes:

helper: "clone", appendTo: « corps ", // ou quel que soit l'élément auquel vous voulez attacher le clone auxiliaire

Cela a deux conséquences. D'abord, il fait glisser une copie de l'élément (option helper), ensuite il associe cette aide à l'élément spécifié (option appendTo).

Des questions similaires ici: jQuery-Ui: Cannot drag object outside of an accordion et ici: jquery sortable cannot be dragged outside of accordion

+0

Merci, c'est exactement ce dont j'avais besoin. –

0

réponse de Edvn a fonctionné pour moi, mais il avait l'effet secondaire désagréable de laisser un style = « display: block » sur chaque élément après le tri terminé, ce qui a cassé les disposition que j'essayais de faire.

Une solution alternative consiste à remplacer le débordement: le style automatique sur .ui-accordéion et .ui-accordéon-content pour déborder: inherit. Cela empêche le triable d'être masqué lors du déplacement. Dans mon cas cela n'a pas eu de problèmes avec l'accordéon, mais sans doute que le style est là pour une raison, donc YMMV. FWIW J'ai testé sur Chrome et Firefox.

Mise à jour: Il y a un compromis lors de l'utilisation de cette méthode également. La modification du style de débordement peut entraîner l'apparition du contenu d'un segment d'accordéon inférieur sous l'objet accordéon lorsque le segment est développé et que le segment supérieur est toujours fermé pendant la séquence d'animation. Vous pouvez minimiser l'impact en définissant uniquement oerflow: inherit sur .ui-accordéion et les instances de contenu .ui-accordéion dont vous avez besoin pour trier et sortir.