Javascript jqGrid可排序行,仅允许对某些行进行排序

Javascript jqGrid可排序行,仅允许对某些行进行排序,javascript,jquery,jqgrid,jquery-ui-sortable,Javascript,Jquery,Jqgrid,Jquery Ui Sortable,我有一个启用了SortableRows选项的jqGrid。以前我一直允许对行进行排序。当删除行时,通过ajax调用更新数据库。为此,我一直在使用update选项 现在我需要实现某些行不允许的排序。即,对于其中一个可见列,列值为“1”的行。我已经成功地阻止了ajax更新,但是从视觉上看,行仍然会在新位置被删除。我需要直观地将行还原到原始位置 到目前为止,我已经有了这段代码,它可以工作,但是带注释的区域是我被困在如何将行恢复到先前位置的地方 jQuery("#all_driver_runs").jq

我有一个启用了
SortableRows
选项的jqGrid。以前我一直允许对行进行排序。当删除行时,通过ajax调用更新数据库。为此,我一直在使用
update
选项

现在我需要实现某些行不允许的排序。即,对于其中一个可见列,列值为“1”的行。我已经成功地阻止了ajax更新,但是从视觉上看,行仍然会在新位置被删除。我需要直观地将行还原到原始位置

到目前为止,我已经有了这段代码,它可以工作,但是带注释的区域是我被困在如何将行恢复到先前位置的地方

jQuery("#all_driver_runs").jqGrid('sortableRows', {
    update: function (ev, ui) {
        //first check the value of the 'placed_in_runs' column
        if ($('#all_driver_runs').jqGrid('getRowData', ui.item[0].id)['placed_in_run'] !== "1") { //here update the database
            if (!ui.item[0].previousSibling) {
                $.post("scripts/update_driver_run_sort.php", {
                    this_one: ui.item[0].id,
                    prev: 'none',
                    next: ui.item[0].nextSibling.id
                });
            } else if (!ui.item[0].nextSibling) {
                $.post("scripts/update_driver_run_sort.php", {
                    this_one: ui.item[0].id,
                    prev: ui.item[0].previousSibling.id,
                    next: 'none'
                });
            } else {
                $.post("scripts/update_driver_run_sort.php", {
                    this_one: ui.item[0].id,
                    prev: ui.item[0].previousSibling.id,
                    next: ui.item[0].nextSibling.id
                });
            }
        } else {
            /*
             *no DB update, and now I need to revert to previous position here ???
             */
        }
    }
});

由于
sortableRows
与jQueryUI的sortable小部件兼容,因此在加载行时,可以通过向行添加一个类,然后在
sortableRows
选项的
(或
取消
)成员中指定它来阻止行的可排序性

因此,假设该类是
不可移动的
,您可以将
“.jqgrow:not(.unmovable)”
传递给
可排序行
。例如:

$('#all_driver_runs').jqGrid('sortableRows', {
    items: ".jqgrow:not(.unmovable)",
    /* remaining options if needed */
});

要将类添加到行中,请参见此。

由于
可排序行
与jQueryUI的可排序小部件兼容,您可以通过将类添加到行中,然后在
项中指定它(或
取消
)来阻止行在加载时可排序
sortableRows
”选项的成员

因此,假设该类是
不可移动的
,您可以将
“.jqgrow:not(.unmovable)”
传递给
可排序行
。例如:

$('#all_driver_runs').jqGrid('sortableRows', {
    items: ".jqgrow:not(.unmovable)",
    /* remaining options if needed */
});

要将类添加到行中,请参见此。

这是一些好东西,谢谢您的帮助!很好。我遇到了这个设置的问题。现在,如果有两个不可移动的行彼此相邻,那么不可能在它们之间放置一个可移动的行。我仍然希望能够在两个不可移动的行之间放置一个可移动的行。请参阅
Cancel
成员。检查“DSK1”列不可排序,而“APPR”列不可排序。试着移动“APPR”,看看这是否是你想要的。是的,谢谢你的帮助,我找到了
cancel
方法,它似乎工作得很好。不幸的是,当我使用
cancel
时,JS正在搞乱另一个方法。。。哦,很好,将其与这里描述的jqGrid
rowattr
配置选项结合起来:您可以根据行数据轻松限制拖动:)这是一些好东西,感谢您的帮助!很好。我遇到了这个设置的问题。现在,如果有两个不可移动的行彼此相邻,那么不可能在它们之间放置一个可移动的行。我仍然希望能够在两个不可移动的行之间放置一个可移动的行。请参阅
Cancel
成员。检查“DSK1”列不可排序,而“APPR”列不可排序。试着移动“APPR”,看看这是否是你想要的。是的,谢谢你的帮助,我找到了
cancel
方法,它似乎工作得很好。不幸的是,当我使用
cancel
时,JS正在搞乱另一个方法。。。哦,很好地将其与这里描述的jqGrid
rowattr
configuration选项结合起来:您可以根据行数据轻松地限制拖动:)