2012-07-30 6 views
8

ドラッグ可能に設定されている要素を取って、現在の機能のようにオーバーレイするのではなく、その要素をコンテナに物理的に移動する必要があります。例えばのでjQuery draggable + droppable - 物理的にドラッグされたアイテムをドロップされたコンテナに移動する

:だから

<div class="container"></div> 
<div class="image"> 
    <img class="thumb" src="images/Koala.jpg" alt="" /> 
</div> 

$(function() { 
    $(".image").draggable(); 
    $(".container").droppable({ 
     drop: function (event, ui) { 
      alert('dropped!'); 
     } 
    }); 
}); 

画像をドラッグして、私はそこに移動する実際のHTML要素を必要とする「コンテナ」のdiv内に落下された後。イベントが発生した後、私はChromeの開発ツールを使用して、ソースを見ていた場合

だから、私が見るであろう:

<div class="container"> 
    <div class="image"> 
     <img class="thumb" src="images/Koala.jpg" alt="" /> 
    </div> 
</div> 

これは可能ですか?

おかげドロップ機能で

+0

ソースビューのdomにJSの変更が表示されることはありません。あなたのブラウザのdevツールの変更が表示される場合があります。 – DanielB

+0

ええ、それは私が意味するものです。私は私の質問を改めるつもりです。 – Jared

答えて

6

これはにドラッグされた要素を移動する必要がありますドームツリーの中に落ちる。

drop: function (event, ui) { 
    $(this).append(ui.draggable); 
} 
+2

これはDOMオブジェクト内に配置しますが(私の回答例を参照)、ドラッグ可能なオブジェクトには視覚的にコンテナの外に置くCSSが残っています。 – saluce

+0

@saluce:これは既に存在する可能性のあるCSS定義に依存します。多分、OPには.container内のすべてのイメージを浮動させる定義があり、追加のCSSを設定する必要はありません。 – DanielB

2

$(this)をドラッグを受け入れるドロップ可能で、これだけドロップ可能にドラッグを追加するために.append()を使用します。http://jsfiddle.net/saluce/P6TjC/

$(function() { 
    $(".image").draggable({helper: 'original'}); 
    $(".container").droppable({ 
     drop: function (event, ui) { 
      $(this).append(ui.draggable.css({position: 'static'})); 
      alert('dropped!'); 
     } 
    }); 
});​ 
+3

'static'は要素をドラッグし続けることに問題を引き起こしました。私は使用しました:$(this).append(ui.draggable.css({position: "relative"、top: ""、left: ""})); – Florian