jqGrid - 保存复选框选中状态

时间:2011-11-17 18:14:39

标签: jquery jqgrid

检查jqGrid中页面的复选框会清除所选的复选框。因此,如果我检查第1页上的某些复选框,然后单击“下一步”转到第2页,然后返回到第1页,则不再选中所选复选框。

jqgrid中有没有办法在客户端处理这个问题?

1 个答案:

答案 0 :(得分:16)

the answer的第一部分包含您问题的答案。您可以找到here

的一个小改进的演示版本

如果您不需要按“多选”列the demo排序,请执行您需要的操作。关于演示的一些小评论:“multiselect”列上的复选框仅选择/取消选择当前页面上的所有行。如果您想要其他行为,代码将更加简单。我通过加载网格直接包含3个项目的演示选择。将在第一页上选择两个项目,在第二页上选择一个项目。在某些情况下,行为可能很有趣。如果您不需要,请仅对idsOfSelectedRows = ["8", "9", "10"];

行进行评论

您将在下面找到演示代码中最重要的部分

var $grid = $("#list"), idsOfSelectedRows = [],
    updateIdsOfSelectedRows = function (id, isSelected) {
        var index = $.inArray(id, idsOfSelectedRows);
        if (!isSelected && index >= 0) {
            idsOfSelectedRows.splice(index, 1); // remove id from the list
        } else if (index < 0) {
            idsOfSelectedRows.push(id);
        }
    };

// initialize selection
idsOfSelectedRows = ["8", "9", "10"];

$grid.jqGrid({
    datatype: 'local',
    // ... other parameters
    multiselect: true,
    onSelectRow: updateIdsOfSelectedRows,
    onSelectAll: function (aRowids, isSelected) {
        var i, count, id;
        for (i = 0, count = aRowids.length; i < count; i++) {
            id = aRowids[i];
            updateIdsOfSelectedRows(id, isSelected);
        }
    },
    loadComplete: function () {
        var $this = $(this), i, count;
        for (i = 0, count = idsOfSelectedRows.length; i < count; i++) {
            $this.jqGrid('setSelection', idsOfSelectedRows[i], false);
        }
    }
});

如果您愿意,可以考虑将idsOfSelectedRows作为jqGrid的附加参数。目前没有jqGrid参数的验证,你可以在那里扩展。优点是idsOfSelectedRows与相应的jqGrid一起持续存在。

更新: Free jqGrid jqGrid的分支支持multiPageSelection: true选项,可以与multiselect: true选项结合使用。它允许在许多页面上保存参数selarrrow(所选行的ID列表)。默认情况下,jqGrid在分页期间重置数组selarrrow,但在使用multiPageSelection: true, multiselect: true的情况下,它不会重置。此外,它在构建页面期间预先选择selarrrow数组中的所有行。因此,如果将selarrrow数组填充所有项目的rowid(所有页面上的所有行),则将显示所选行。用户仍然可以取消选择某些行,jqGrid不会更改用户所做的更改。

The demo创建的

the answer显示了免费jqGrid中multiPageSelection: true的使用情况。 Another answer很快介绍了免费jqGrid的其他新选项:multiselectPosition: "right",它允许将多选复选框的列移动到右侧multiselectPosition: "none",这允许使用多选功能而不使用任何多选列和{ {1}}回调,可用于创建不在jqGrid的所有行中的多选复选框。