2013-01-07 3 views
9

今私は要素の列を持っています。ドラッグする場所、クローンしますが、ドロップすると元のものも削除されます。jQuery UI sortable:クローンを移動しますが元のままにします

$(".column").sortable({ 
     helper: 'clone', 
     connectWith: ".column", 
     connectWith: ".grid", 
     start: function(e, ui){ 
      ui.placeholder.height(ui.item.height()); 
      $(".column").find('.portlet:hidden').show() 
      console.log('started') 
     }, 
     stop: function(event, ui) { 
      $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body'); 
     } 
    }); 

は、どのように私はどこにその(列に再度追加なし)で、オリジナルを維持し、目的の場所へのクローンの動きを持つことができますか?

+1

'clone()'を使用すると無効なHTML(重複ID)が生成されることに注意してください。 – jbabey

+1

[この質問](http://stackoverflow.com/questions/6940390/how-do-i-duplicate-item-when-using-jquery-sortable)は非常によく似ており、素晴らしい答えがあります。受け入れられたものではなく、投票されたもの。 – Coderer

答えて

12

ストップイベントハンドラ内で$(this).sortable('cancel')を使用すると、アイテムを元のリスト/位置に戻すことができます。 http://api.jqueryui.com/sortable/#method-cancel

$(".column").sortable({ 
     helper: 'clone', 
     connectWith: ".column", 
     connectWith: ".grid", 
     start: function(e, ui){ 
      ui.placeholder.height(ui.item.height()); 
      $(".column").find('.portlet:hidden').show() 
      console.log('started') 
     }, 
     stop: function(event, ui) { 
      $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body'); 
      $(this).sortable('cancel'); 
     } 
    }); 

UPDATE:

のように次のような何かを、アイテムがドロップされた場所に第二のリストに要素を追加するには:

stop: function(event, ui) { 
      var toListID = ui.item.parent().attr('id'); 
      var idx = $('#' + toListID).children().index($(ui.item[0])); 
      if(idx== -1)return; 
      var elm = $(ui.item[0]).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone'); 
      $('#' + toListID).children(':eq('+idx+')').after(elm); 
      $(this).sortable('cancel'); 
     } 

fiddle用を参照してください。完全なデモ

+0

これは複製された要素をキャンセルするようです。私が落ちると、落ちる場所に何も入りません。 –

+0

@delboud私のための仕事:http://jsfiddle.net/adamb/tZSN7/11/ – adamb

+0

私はあなたが今考えていることを見て、追加する前にその解決策を試みましたが、実際のドロップの位置にある必要があります。一番下に追加されるだけではありません。どのように追加を避けるためのアイデア? –

1

これは他のproach:

sort: function(e, ui) { 
    $(ui.placeholder).html($(ui.item).html()); 
    $(ui.placeholder).addClass($(ui.item).attr('class')); 
}, 
関連する問題