jQuery draggable和appendTo不起作用

Mat*_*ewK 7 jquery jquery-ui draggable appendto

我使用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>
Run Code Online (Sandbox Code Playgroud)

脚本

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

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;
}
Run Code Online (Sandbox Code Playgroud)

这是一个现场演示:http://jsfiddle.net/fzjev/

RYF*_*YFN 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();
        }
    });
Run Code Online (Sandbox Code Playgroud)

然后,您可能希望手动将可拖动项附加dropdroppable元素上.

 $('.dropArea').droppable({
        accept: '.draggyThing',
        drop: function (event, ui) {
            $('.dropArea').append(ui.draggable);
        }
    });
Run Code Online (Sandbox Code Playgroud)


Ian*_*son 4

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

来自 jQuery UI 1.8.18(第 275 行左右)

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

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