7

我使用 jQuery ui 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/

4

3 回答 3

9

这是关于该问题的一个未解决的错误 - Draggable: appendTo 选项不能与 helper: 'original' 一起使用

helper: 'clone'建议的解决方法是在拖动开始/停止时使用和隐藏/显示原件。

例如

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

然后,您可能希望手动将您的可拖动元素附加到drop元素上droppable

 $('.dropArea').droppable({
        accept: '.draggyThing',
        drop: function (event, ui) {
            $('.dropArea').append(ui.draggable);
        }
    });
于 2013-05-13T13:58:58.380 回答
4

看起来要识别 appendTo 选项,被拖动的项目必须在正文之外。

从 jQuery UI 1.8.18(大约第 275 行)

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

在您的示例中, if 语句的计算结果为 false,因此不会触发 appendTo 逻辑。

于 2012-03-10T16:28:39.707 回答
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();
}
于 2016-09-12T11:23:54.910 回答