jQuery用户界面可排序事件,beforeStop得到错误的index()值

时间:2019-05-02 20:41:08

标签: jquery-ui

我们有一个使用jQuery ui-sortable的对象列表,用于ui,以实现对用户的拖放重新排序。

我想在顶部添加不可拖动的行,并防止任何行被拖动到其上方。使用在这里找到的示例,我从beforeStop开始在配置上实现了一些事件处理程序。

我的问题是,有时我进入beforeStop事件处理程序,并且ui.item.index()返回错误的结果。如果拖动恰好,则ui.item.index()返回1,即使将其拖放到0插槽中也是如此。与其将0中的内容向下推,还不如从列表中挑选一个看似随机的位置(尽管这可能与渲染ui.placeholder的滞后有关)。

我发现一些帖子说index()是0还是1,具体取决于您向上或向下移动的时间。在这种情况下,我总是在第0个项目上使用已禁用的手柄向上拖动。因此,听起来应该总是从0开始。

尽管如此,我还没有发现有关index()的任何文章。有什么想法吗?

这些是我的处理程序:

beforeStop: function (ev, ui)
{   // beforeStop apparently is not reliable for cancel, so leave some state for stop
    if (ui.item.index() == 0) // sometimes returns the wrong number
        ui.item.badmove = true;
},
stop: function(ev, ui)
{
    if (ui.item.badmove)
        $(this).sortable("cancel");
},

1 个答案:

答案 0 :(得分:0)

我最终放弃了尝试使ui-sortable具有不可移动的任何行,而是在其上方立即设置了一个单独的列表,使其看起来像可排序但不参与其中。

ui-sortable太脆弱了。我找不到任何从任何事件中获得确定性行为的方法。