2012-03-01 4 views
2

ソート可能なリストを複数接続しているので、1つのリストから1つのアイテムをドラッグして別のリストに置くことができます。すべてのリストには、ソート可能でもドロップターゲットでもない、その下に1つのアイテムがあり、その下にアイテムをドロップすることは不可能です。アイテムを除外したソート可能なリストにアイテムをドロップする

これは意図された使用です。私は、各リストの最後にある除外されたアイテムを常に下部に置いておきたいと思います。

問題点は、リストを空にして、そのアイテムのすべてをドラッグして別のリストに配置すると、残りのアイテムは並べ替えられないアイテムになります。新しいアイテムをドラッグすると、ソートできない、ドロップ対象ではないアイテムの下に常に下に移動します。

新しいアイテムをソート可能でないドロップターゲットのアイテムが1つしかないソート可能なリストにドロップすると、リストの一番上に置くことは可能ですか?

例コード:

$('.segment ol').sortable({ 
    connectWith: '.segment ol', 
    distance: 25, 
    items: 'li:not(.disabled)' 
}); 

HTML:あなたはそれが無効の下に追加さになるだろう、他のリストに "単語単語単語" をドラッグした場合

<div class="segment"> 
     <ol> 
     <li>word word word</li> 
     <li>word word word</li> 
     <li class="disabled">must stay at bottom</li> 
     </ol> 
    </div> 
    <div class="segment"> 
     <ol> 
     <li class="disabled">must stay at bottom</li> 
     </ol> 
    </div> 

li

あなたがソート可能なリスト(あなたがオプションを提供)の「受信」イベントを使用して、このような何かを行うことができます
+0

いくつかのサンプルのhtml、あなたが – DG3

+0

完了しようとしているjqueryのコードを投稿してください。これはバグではないことです。ソート可能なリストが動作するデフォルトの方法ですが、回避策があるかどうかを知りたいのですが。 – Nathanael

答えて

6

$('.segment ol').sortable({ 
    connectWith: '.segment ol', 
    distance: 25, 
    items: 'li:not(.disabled)', 
    over: function(event,ui){ ui.placeholder.insertBefore($(this).children('li.disabled:first')); } 
}); 

現在ドラッグされた要素がリストに自分自身を付加なります(先頭に追加最初に複製しない限り、prependToは効果的にアイテムを移動します)。

+0

ありがとうございました。私が持っている問題は、アイテムをドラッグしているときも、プレースホルダは無効なアイテムの下に表示されるということです。それで、それが着陸すると予想される場所です。私はより使いやすいソリューションを望んでいます。 – Nathanael

+0

ああ、それはそれを修正する必要があります。これで、接続されたソート可能リストに項目を移動すると、最初に無効にされたliの前にプレースホルダが挿入されます。 – musicinmyhead

+0

まあ、今のところ、ドロップ領域の上に最初にカーソルを置いたときに、プレースホルダが上にある場合でも、プレースホルダは下になります。リスト内を移動すると、最終的に正しい場所に移動します。 –

1

これは物事のハック側にあるかもしれませんが、各リストの上部に0pxの高さのソート可能なアイテムを追加するか、display: noneとすることができます。これにより、アイテムはソート不可能なアイテムの代わりにそのアイテムの後ろにソートされます。

<ol> 
    <li class="hidden"></li> 
    <li>word word word</li> 
    <li>word word word</li> 
    <li class="disabled">must stay at bottom</li> 
</ol> 

CSS:

.hidden { 
    display: none; 
} 

http://jsfiddle.net/HPM7V/2/

+0

私はこれがより良いのが実際に好きです。他の答えが示唆するように、そうすることで、私はプレースホルダーの私の手動オーバーライドで癖を心配する必要はありません。リストに項目が入ったら、それを100%デフォルトにします。このルートはそれを実現します。私はドロップで隠されたliを削除し、移動後に空のリストに追加します。アイデアをありがとう。 –

関連する問題