2017-06-14 6 views
0

私は2つのリストを持っている:ドラッグ中にソート可能なアイテムを動的に除外する方法はありますか?

<ul class='list_one'> 
<li>drag me</li> 
<li>drag me</li> 
</ul> 

<ul class='list_two'> 
<li class='first'>top most</li> 
<li class='middle'>here i am</li> 
<li class='middle'>here i am</li> 
<li class='last'>least most</li> 
</ul> 

私はソートされたか、まったくシフトさから2番目のリストの最初と最後のアイテムを防ぎたいです。彼らは永遠にそれらの位置にとどまるべきです。

問題は、プレースホルダシャドウがキャストされると、最後のアイテムが固定された場所から押し出されるということです。

jQuery('ul.sq-ranksort-buckets').sortable({ 
    connectsWith: 'ul.sq-ranksort-cards', 
    items: "li:not(.last_dropped, .suppress_move)", 
    cancel: ".ui-sortable-disabled, .suppress_move, .do_not_drop, ul.do_not_drop", 
    over: function(event, ui) { 
    if(jQuery('.suppress_move.last:visible').length === 0) { 
     jQuery(this).addClass('do_not_drop'); 
     jQuery(ui.item).addClass('last_dropped'); 
     console.log('should cancel happen: ' + jQuery('.do_not_drop').length); 
    } else { 
     jQuery(this).removeClass('do_not_drop'); 
     jQuery(ui.item).removeClass('last_dropped'); 
     console.log('should cancel happen: ' + jQuery('.do_not_drop').length); 
    } 
    } 
}); 

Fiddle

動的通常、ミッドソートをキャンセルクラスによって指定し、国連での並べ替えを落としたかのように、その後、イベントトリガーを持っているものを作り直す方法がある場合、私は思っていました-sortableエリア?

これは元のソート可能な呼び出しとオプションを制御することができず、制限された機能で単純に再キャストすることもできないため、これが必要なアプローチです。

+0

したい' .first'と ' .last'は現在のインデックスにとどまりますか?または、最後の項目である限り、 '.last'は移動することができますか? – Twisty

+0

@Twisty .lastは "shift"することを許されてはいけません。シフトする機会は決してありません。たとえ特定の項目を無効にしても、その例では、ソート可能なjQuery UI APIであっても、インデックスが変更され、特定のドラッグシナリオでシフトされます。 –

答えて

1

コードに誤字がありました。私はあなたに基づいて新しいフィドルを作った。 最新のjQuery UIバージョンと「.sortable( 'instance')」に問題があるため、バージョン1.11.4を選択します。

"over"オプションを使用すると、リストと「停止」オプションの両方のスクロール機能を使用して、2番目のリストを並べ替えることができます。これは、list_twoからすべての項目を削除する場合に必要です(最初の項目と最後の項目を除く)。 これはあなたが探しているものです。フィドル

$(function() { 
    $(".connectedSortable").sortable({ 
     connectWith: '.connectedSortable', 
     items: "li:not(.first, .last)", 
     placeholder: "ui-state-highlight", 
     over: function(e, ui){ 
      $(ui.sender).sortable('instance').scrollParent = $(e.target) 
     }, 
     stop: function (e, ui) { 
      if ($('.list_two li').length < 4) { 
       $('.list_two li:eq(2):not(.first, .last)').after($('.list_two li:eq(1)')); 
      } 
     } 
    }).disableSelection(); 
}); 

は、以下を参照してください:ここ

は新しいコードである `.list_two`は4つの項目があり、そして第五が行う、中にドラッグされたときにそう https://jsfiddle.net/9tLzwpra/7/

+0

シャドウがインデックスから最後の項目を押し出すのをどのくらい防ぎますか? –

+0

「シャドーを防ぐ」とは何を意味するのか分かりませんが、list_twoからすべての項目を削除すると、もう1つの項目をドラッグして項目を並べ替え、最初の項目の後に項目を押します。 – MattOpen

関連する問題