2012-03-10 8 views
7

私はjQueryを使用していますが、オプションappendToは機能しません。しかし、封じ込めやグリッドのような他のオプションは適切に機能します。ここでは、コードは次のようになります。ここではjQuery draggableとappendToは機能しません。

HTML

<div id="demo"> 
</div> 
<div id="sidebar"> 
    <div class="item"> 
    </div> 
    <div class="item"> 
    </div> 
    <div class="item"> 
    </div> 
    <div class="item"> 
    </div> 
</div> 

スクリプト

jQuery(".item").draggable({ appendTo: "#demo", grid: [ 10, 10 ], containment: "#demo" }); 

CSS

#demo { 
    width: 500px; 
    height: 500px; 
    border: 1px solid black; 
    float: left; 
} 
#draggable { 
    background: red; 
    width: 50px; 
    height: 50px; 
} 
#sidebar { 
    float: left; 
    width: 300px; 
} 
.item { 
    cursor: pointer; 
    background: black; 
    width: 100px; 
    height: 100px; 
    margin: 10px; 
} 

はライブデモです:http://jsfiddle.net/fzjev/

答えて

3

それはAPのためにのように見えますpendToオプションが認識されるには、ドラッグされているアイテムがボディの外側にある必要があります。あなたの例では

(ライン275の周り)のjQuery UI 1.8.18から

if(!helper.parents('body').length) 
    helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); 

if文は偽と評価され、そのappendToロジックは発生しません。

+0

http://jsfiddle.net/fzjev/項目をドラッグして、あなたはそれが#demo内部にドラッグ可能であるが、

ことがわかります#demoの内側には追加されません。 – MatthewK

+0

私のこれまでの答え(これは本当に質問のほうが多かったです)を食い止め、より多くの回答を得ました。私は正直なところ、なぜそれが設定されているのかは分かりませんが、少なくとも今何が起こっているのかを知っています。 –

9

ここに問題のオープンバグがあります。Draggable: appendTo option doesn't work together with helper: 'original'です。

推奨される回避策は、helper: 'clone'を使用し、ドラッグの開始/停止時に元の画像を表示/非表示にすることです。

$('.draggyThing').draggable({ 
     appendTo: '.dropArea', 
     helper: 'clone', 
     start: function (event, ui) { 
      $(this).hide(); 
     }, 
     stop: function (event, ui) { 
      $(this).show(); 
     } 
    }); 

あなたはおそらく、手動droppable要素のdropであなたのdraggablesを追加したいと思います。私の場合は

$('.dropArea').droppable({ 
     accept: '.draggyThing', 
     drop: function (event, ui) { 
      $('.dropArea').append(ui.draggable); 
     } 
    }); 
+0

これは、実際にはOPの質問に対する答えと、それ以外の場合に期待されるものと同じ振る舞いを持つ解決策のようです。 –

+1

Jquery Sortableは同じ方法で動作しますが、ソート可能なアイテムのコンテナ要素に対してソート可能なので、 '$(this)'の代わりに 'ui.item.hide()/ show()'を使いたい場合 –

0

、細かいこれらの例を働く:

$("[drag='true']").draggable({ 
    drag: handleDragDrag, 
    start: handleDragStart, 
    stop: handleDragStop, 
    helper: 'clone', 
    appendTo: 'body' 
}) 
function handleDragStart(ev, ui) { 
    $(this).show(); 
} 
function handleDragDrag(ev, ui) { 
} 
function handleDragStop(ev, ui) { 
    $(this).show(); 
} 
関連する問題