我们的页面中有一个嵌套菜单,可以通过拖放来重新排序和嵌套菜单项。
似乎存在一个问题(我们正在使用jQuery 1.7.2和UI 1.8.22),如果您同时具有可排序和可放置,则排序容差不一致并导致问题。
一个例子是比我能更好地解释它......
我刚刚创建了显示问题所需的最小值,而不是嵌套菜单,只是我们用来使其工作的机制。
拿起“第4项”并慢慢向上拖动。 3将突出显示,这意味着它是下降的目标。很好,但继续向上移动直到它在2和3之间的间隙。我想把它放在这里并导致排序。但是,如果我这样做,因为3仍然突出显示,它将“丢弃”(而在我们的实际代码中,创建一个嵌套菜单)。
实际上在第2项之前有一些像素,您可以在其中获得所需的效果。但是,如果向下移动太远,它将再次下降而不是排序。
基本上,问题在于我会认为如果项目处于差距中,它应该排序,只有当我超过另一个突出显示的项目时才会掉线。
我有一个部分解决方法,强制UI重新计算位置 - 取消注释“out”函数中的代码。
现在,如果你向上拖4,你仍会遇到同样的问题,如果你触摸2然后向下移动到间隙,没有任何突出显示,所以它会正确排序。
但问题仍然存在,第一次向上拖动并不像你在第一次重新安排时那样有效。
(我确实尝试将解决方法添加到jquery.ui代码中的ui.sortable的_mousedrag中,它确实解决了问题....但我不知道我在那里做了什么:)
所以我不确定我做错了什么或者这是一个错误吗?
在我记录错误报告之前,有没有人遇到过类似的东西?
答案 0 :(得分:3)
在深入挖掘源代码后,我找到了一个解决问题的方法。
问题是当项目移动并且虚拟占位符插入列表中时,位置无法正确计算。
您需要将此添加到可排序的
refreshPositions: true
e.g。
$("ul").sortable({
helper: "original",
refreshPositions: true,
update: function(event, ui) {
:
}
});
这会导致它重新计算每次鼠标移动的位置。非常低效,但它不会起作用。