首先,我知道这个问题以前在这个网站和其他网站上都被问过,但是对于我的情况,答案都很垃圾(如果它们不完全是垃圾),并且(至少对于这个问题:jQuery UI drop event of droppable fires on sortable),建议只是完全关闭.sortable
,这肯定不是我想做的。
好的,我有这个jquery代码(请注意,如果任何选项或HTML ID看起来很愚蠢,这只是为了测试,以便我可以尝试弄清楚):
$(function () {
$("#sortable").sortable({
revert: true
});
$("#draggable, #draggable2").draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid"
});
$("#sortable").droppable({
drop: function (event, ui) { alert("done been triggered."); }
});
$("ul, li").disableSelection();
});
这里是有效的标记:
<div class="objectPaletteHolder">
<ul>
<li id="draggable" class="ui-state-highlight">Drag me down</li>
<li id="draggable2" class="ui-state-highlight">Drag this down, too</li>
<li id="draggable2" class="ui-state-highlight">Drag this down, also</li>
<li id="draggable2" class="ui-state-highlight">Drag this down, as well</li>
<li id="draggable2" class="ui-state-highlight">Drag this down, too</li>
<li id="draggable2" class="ui-state-highlight">Drag this down, too</li>
<li id="draggable2" class="ui-state-highlight">Drag this down, too</li>
<li id="draggable2" class="ui-state-highlight click">Drag this down, click</li>
<li id="draggable2" class="ui-state-highlight clicky">Drag this down, clicky</li>
</ul>
</div>
<div class="editContainer">
<ul id="sortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
</div>
我没有重叠的sortable
div或类似的东西,我认为我理解这是为什么(因为默认情况下sortable
会获取可拖动属性?),但我似乎无法为此做任何事情。
问题,当然,在于...
drop: function (event, ui) { alert("done been triggered."); }
触发两次,只需要一次。
我认为这个问题应该有一个简单的解决方案,如果需要大量复杂的脚本才能解决这个问题,我会觉得这些jQuery小部件不值得麻烦。也许我只是感到困惑?