jQuery 可拖动和 appendTo 不起作用
Posted
技术标签:
【中文标题】jQuery 可拖动和 appendTo 不起作用【英文标题】:jQuery draggable and appendTo doesn't work 【发布时间】:2012-03-27 17:14:49 【问题描述】:我使用 jQuery ui 可拖动,但选项 appendTo 不起作用。但是,其他选项(例如包含或网格)可以正常工作。代码如下:
<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/
【问题讨论】:
【参考方案1】:这里有一个关于这个问题的开放错误 - 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();
);
然后您可能希望手动将您的可拖动项附加到 drop
的 droppable
元素上。
$('.dropArea').droppable(
accept: '.draggyThing',
drop: function (event, ui)
$('.dropArea').append(ui.draggable);
);
【讨论】:
这实际上似乎更像是对 OP 问题的回答,以及具有与预期行为相同的行为的解决方案。 Jquery Sortable 的工作方式相同,但 sortable 是在可排序项目的容器元素上启动的,因此在这种情况下您可能希望使用ui.item.hide()/show()
而不是 $(this)
【参考方案2】:
看起来要识别 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 逻辑不会被触发。
【讨论】:
jsfiddle.net/fzjev 拖动一个项目,您会看到它在#demo 中是可拖动的,但 不会附加在#demo 中。 使我之前的答案(实际上更像是一个问题)黯然失色,并更新了一些更像答案的东西。老实说,我不确定为什么会这样设置,但至少我们知道现在发生了什么。【参考方案3】:在我的情况下,这些例子可以正常工作:
$("[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();
【讨论】:
以上是关于jQuery 可拖动和 appendTo 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
.appendTo在.bind(加载)中不起作用 - jQuery