jqGrid – 保存复选框选中状态

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

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

答案的第一部分包含您问题的答案。 你可以在这里找到一个小改进的演示版本。

如果您不需要按“多选”列进行排序, 则演示可以执行您需要的操作。 关于演示的一些小评论:“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作为idsOfSelectedRows的附加参数。 目前没有jqGrid参数的validation,你可以在那里扩展。 优点是idsOfSelectedRows与相应的idsOfSelectedRows一起持久化。

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

为答案创建的演示显示了multiPageSelection: true的用法multiPageSelection: true在自由jqGrid中为multiPageSelection: true 。 另一个答案很快描述了免费jqGrid的其他新选项:multiselectPosition: multiselectPosition: "right" ,它允许将多选复选框的列移动到右边, multiselectPosition: "none" ,允许使用多选function而不使用任何多选列和hasMultiselectCheckBox回调,可用于创建不在jqGrid的所有行中的多选复选框。