【发布时间】:2014-03-04 15:31:14
【问题描述】:
我希望可以将几个 HTML 元素拖动(可拖动)到几个其他 HTML 元素中。 (可滴)
我发现 jQuery UI 是可拖放的。
目前,我将 ul 中的所有 li 元素定义为可拖动的。我还有三个接受所有可拖动 li 元素的 div。
<ul>
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ul>
将它们定义为可拖动的:
$('li').draggable({ revert: 'invalid' });
我的可放置 div:
<div class="droppable" id="div1"></div>
<div class="droppable" id="div2"></div>
<div class="droppable" id="div3"></div>
使 div 可放置:
$('div.droppable').droppable({ accept: 'li', drop: funcDrop, out: funcOut });
我现在希望只能将一个 li 元素同时放入一个 div 中。我试图通过禁用 div 元素内的可放置性来做到这一点,我删除了可拖动对象,如下所示:
funcDrop = function(event, ui) {
$(this).droppable('disable');
}
这行得通。现在我无法将任何其他 li 元素放入此 div 中。问题是,如何/何时再次启用 div?显然,如果 contianing draggable 被删除。所以我尝试启用 funcOut 中的 div:
funcOut= function(event, ui) {
strIdValue = event.target.id;
$('#' + strIdValue).droppable('enable');
}
但这不起作用。 看来我也不能在 funcOut 中使用 $(this) 选择器。
有人有提示吗?
最好的问候
我使用 jQuery 2.1 和 UI 1.10.4
【问题讨论】:
-
嗨,你确定 `$('#' + strIdValue) ` 选择了正确的元素吗?尝试`console.log($('#' + strIdValue).size()); `
-
嗨,是的,我确定。我把调试代码留在这里。在可拖动对象至少移动一次后,似乎不再调用 out 函数。 div 不再启用 :(
-
你能扔一个 JSFiddle 吗?
-
我能得到的最接近的:jsfiddle.net/qN8s9 如果你将一个 li 元素拖到一个 div 中,它将被放置。现在您不能向 div 添加另一个 li 元素。我不知道为什么 li 会卡在 diff 中,这与我浏览器中的版本不同,即使代码相同。无论如何,即使你可以拖动一个卡住的元素,我的问题是,即使 li 元素完全离开了 div,div 也不会变得可放置。
-
嗨,我设法创建了一个有效的 JSFiddle:jsfiddle.net/qN8s9/1 您可以将 foo 拖入 1。现在您无法将 bar 拖入 1。如果您现在将 foo 拖入 2,则可以t 将 bar 和 foo 拖入 1 了。 1 不会启用。
标签: javascript jquery drag-and-drop draggable