jQuery可排序和可放置容差问题

时间:2012-08-08 17:56:14

标签: jquery jquery-ui-sortable jquery-ui-droppable

我们的页面中有一个嵌套菜单,可以通过拖放来重新排序和嵌套菜单项。

似乎存在一个问题(我们正在使用jQuery 1.7.2和UI 1.8.22),如果您同时具有可排序和可放置,则排序容差不一致并导致问题。

一个例子是比我能更好地解释它......

http://jsfiddle.net/8fUxV/5/

我刚刚创建了显示问题所需的最小值,而不是嵌套菜单,只是我们用来使其工作的机制。

拿起“第4项”并慢慢向上拖动。 3将突出显示,这意味着它是下降的目标。很好,但继续向上移动直到它在2和3之间的间隙。我想把它放在这里并导致排序。但是,如果我这样做,因为3仍然突出显示,它将“丢弃”(而在我们的实际代码中,创建一个嵌套菜单)。

实际上在第2项之前有一些像素,您可以在其中获得所需的效果。但是,如果向下移动太远,它将再次下降而不是排序。

基本上,问题在于我会认为如果项目处于差距中,它应该排序,只有当我超过另一个突出显示的项目时才会掉线。

我有一个部分解决方法,强制UI重新计算位置 - 取消注释“out”函数中的代码。

现在,如果你向上拖4,你仍会遇到同样的问题,如果你触摸2然后向下移动到间隙,没有任何突出显示,所以它会正确排序。

但问题仍然存在,第一次向上拖动并不像你在第一次重新安排时那样有效。

(我确实尝试将解决方法添加到jquery.ui代码中的ui.sortable的_mousedrag中,它确实解决了问题....但我不知道我在那里做了什么:)

所以我不确定我做错了什么或者这是一个错误吗?

在我记录错误报告之前,有没有人遇到过类似的东西?

1 个答案:

答案 0 :(得分:3)

在深入挖掘源代码后,我找到了一个解决问题的方法。

问题是当项目移动并且虚拟占位符插入列表中时,位置无法正确计算。

您需要将此添加到可排序的

refreshPositions: true

e.g。

$("ul").sortable({
    helper: "original",
    refreshPositions: true,
    update: function(event, ui) {
       :
    }
});

这会导致它重新计算每次鼠标移动的位置。非常低效,但它不会起作用。