我喜欢jqGrid,但有时候似乎比他们应该更复杂。
我想要实现的是在每行上设置一个复选框,以便用户可以选择要提交/处理的行。
但是,我需要阻止一些复选框,因为用户对该行没有任何授权。
我想要实现的是在每行上设置一个复选框,以便用户可以选择要提交/处理的行。
但是,我需要阻止一些复选框,因为用户对该行没有任何授权。
我试图设置多重选择:true,然后我试图隐藏复选框:
loadComplete: function (data) { if (data.rows.length > 0) { for (var i = 0; i < data.rows.length; i++) { if (data.rows[i].cell[7] == 'false') { $("#jqg_OrdersGrid_" + data.rows[i].id).css("visibility","hidden"); } } } },
它的效果很好,但是.jqGrid(‘getGridParam’,’selarrrow’)给我所选的行,即使它们没有被检查。
是否有任何其他方式可以启用/禁用复选框,以及如何知道哪些已被检查?
谢谢
解决方法
我建议你禁用一些复选框从可选择的“禁用”属性。要充分实现,您将需要
在loadComplete事件句柄中设置“disabled”
>另外防止在BeforeSelectRow事件句柄之前选择禁用的行
>要支持多选列的标题中的“全选”复选框,可以实现onSelectAll事件句柄,这些事件句柄可以修复禁用行的选择。
var grid = $("#list10"),i; grid.jqGrid({ //... loadComplete: function() { // we make all even rows "protected",so that will be not selectable var cbs = $("tr.jqgrow > td > input.cBox:even",grid[0]); cbs.attr("disabled","disabled"); },beforeSelectRow: function(rowid,e) { var cbsdis = $("tr#"+rowid+".jqgrow > td > input.cBox:disabled",grid[0]); if (cbsdis.length === 0) { return true; // allow select the row } else { return false; // not allow select the row } },onSelectAll: function(aRowids,status) { if (status) { // uncheck "protected" rows var cbs = $("tr.jqgrow > td > input.cBox:disabled",grid[0]); cbs.removeAttr("checked"); //modify the selarrrow parameter grid[0].p.selarrrow = grid.find("tr.jqgrow:has(td > input.cBox:checked)") .map(function() { return this.id; }) // convert to set of ids .get(); // convert to instance of Array } } );
UPDATED:Free jqGrid支持hasMultiselectCheckBox回调,可用于创建多选择复选框,而不是jqGrid的所有行。可以使用rowattr来另外禁用某些行。因此,将以更简单的方式获得上述功能。建议对本地数据(数据类型:“local”或loadonce:true)另行使用multiPageSelection:true选项。选项multiPageSelection:true将在分页上保存数组selarrrow。它允许通过填充相应的ids inselarrrow“预先选择”一些行。有关更多信息,请参阅the answer和the answer的更新部分the demo。