检查jqGrid中页面的复选框会清除所选的复选框。因此,如果我检查第1页上的某些复选框,然后单击“下一步”转到第2页,然后返回到第1页,则不再选中所选复选框。
jqgrid中有没有办法在客户端处理这个问题?
答案 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 answer显示了免费jqGrid中multiPageSelection: true
的使用情况。 Another answer很快介绍了免费jqGrid的其他新选项:multiselectPosition: "right"
,它允许将多选复选框的列移动到右侧multiselectPosition: "none"
,这允许使用多选功能而不使用任何多选列和{ {1}}回调,可用于创建不在jqGrid的所有行中的多选复选框。