2011-04-06 12 views
0

ドラッグで問題が発生しました&ドロップin jQuery。私のコードには、ドラッグ可能なdivがあります。特定のドロップ可能な表のセルに移動すると、divのクローンが表のセルに追加されます。しかし、クローンをドラッグすると元のdivが代わりに移動します。これは、ここにドロップに呼び出される関数です:jQueryドラッグアンドドロップ:クローンドラッグ可能な移動元

function(event, ui) 
{ 
    var draggable = ui.draggable.clone(true); // cloning including attrs and children 
    draggable.draggable(); // this is something I tried with no effect 
    $(this).empty(); // empty the droppable cell 
    $(this).append(draggable); // append the div to the cell 
} 

私はグーグルによって明確な答えを見つけることができませんでした。私はそれが何かを持っているかどうか分からないが、divは相対的な位置を(そしてその方法を維持する必要があります)。

クローンを元のようにドラッグできることを確認するにはどうすればよいですか?

+1

元の要素とともに 'id'属性をクローンできますか?これはおそらく奇妙な問題を引き起こすでしょう。 –

+0

@Andrew:はい、それと一緒にクローンされますが、私はドラッグ可能なid属性は必要ありません。カスタム属性( '[drag = article]')に基づいて別のjqueryセレクタを使用します。 – RemiX

答えて

2

これは私がそれを行う方法です、これはトリックを行う必要があります。

$(".draggable").draggable({ helper: 'clone' }); 
$(".droppable").droppable({ 
    drop: function (event, ui) { 
     ui.draggable.clone().appendTo($(this)).draggable(); 
    } 
}); 

私はあなたがやったかどうかを知りませんが、ドラッグ可能にID-Sを使用していない、これらはあまりにも複製しようとしている原因となります。また、ドラッグ可能な要素を適用する前に要素を追加する必要があります。

+0

ありがとう!それは動作します。おそらく、大きな違いは、クローンでappendToを使用することです。その代わりに、droppableからappendを使用します。ドラッグ可能なプロパティをクローンにクローンする方法もありますか?今では新しいドラッグ可能なヘルパーがないので、私はそれをハードコードしたくないです。 – RemiX

+0

そのコメントに対する私自身の答えが見つかりました:ui.draggable.draggable( 'option')は、現在のドラッグ可能なすべてのオプションをコピーします。 – RemiX

0

Helper Optionを見ましたか?

+0

はい、私はヘルパー: 'クローン'を使いましたが、ドラッグするというだけではなく、ドロップされたときに実際の要素が複製されています。 – RemiX

1

あなたはfalseを.clone()に渡してみましたか?そのboolはwithDataAndEventsの略で、古いオブジェクトにも関連付けられているすべての同じイベントを継承しています。

編集:他の理由でDataAndEventsが必要な場合は、クローンを作成する前に元の右にdraggable( "destroy")を使用してから、再度ドラッグ可能にすることができますか?最もエレガントではありませんが動作します:http://jsfiddle.net/GheD5/

+0

はい私はクローンメソッドでfalseを使ってみましたが、子要素と属性が同じである必要がありますので、私はtrueを使用しています。私はあなたの編集された発言を明日、おかげで試してみます。 – RemiX

0

完全なコードを表示できますか?私は今推測していますが、代理人() 'http://api.jquery.com/delegate/を使用することがあなたのソリューションの鍵になる可能性があります。

+0

今私はどのようにデリゲートを使うべきか分かりませんが、私はすでにrucsiのおかげで解決策があると思います。しかし、ありがとう。 – RemiX

1
そうでなければ、あなたはドラッグ操作を終えたところだけ残ってます、元のアイテムをドラッグしている helper: "clone"

$("selector").draggable({ 
     ... 
     helper: "clone", 
     ... 
}); 

を含めるようにdraggable初期化コードを変更し

+0

ええ、私はそれを持っています。クローンをドラッグすると、元の位置からドラッグされます。 – RemiX