我使用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/
答案 0 :(得分:9)
这是一个关于这个问题的公开错误 - Draggable: appendTo option doesn't work together with helper: 'original'。
建议的解决方法是使用helper: 'clone'
并在拖动开始/停止时隐藏/显示原始文件。
e.g。
$('.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);
}
});
答案 1 :(得分: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逻辑。
答案 2 :(得分: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();
}