jqgrid:multiselect和禁用检查(有条件的) [英] jqgrid: multiselect and disable check (conditional)
问题描述
我喜欢jqGrid,但有时情况似乎比应有的要复杂.
我想实现的是在每行上都有一个复选框,以便用户可以选择要提交/处理的行.
但是,我需要阻止一些复选框,因为用户可能对该特定行没有授权.
I love jqGrid but sometimes things seem more complicated than they should be.
What I would like to achieve is to have a checkbox on each row so that a user can choose which rows are going to be submitted/processed.
I need, though, to block some checkboxes cause the user has no authorization on that particular row, maybe.
我尝试设置multiselect: true
,然后尝试隐藏复选框:
I've tried to set multiselect: true
and then I've tried to hide the checkbox:
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')
仍然给了我选定的行,即使它们没有被检查也是如此.
还有其他方法可以启用/禁用复选框,也可以知道已选中哪些复选框吗?
and it works well but, still, .jqGrid('getGridParam', 'selarrrow')
give me the selected rows, even if they haven't been checked.
Is there any other way to have checkboxes which are enabled/disabled and a way to know which ones have been checked?
谢谢
推荐答案
我建议您针对"disabled"属性禁用一些来自selectable的复选框.要全面实施,您将需要
I would suggest you to disable some checkboxed from the be selectable with respect of "disabled" attribute. To make full implementation you will need
- 在
loadComplete
事件句柄内部设置已禁用" - 另外防止选择
beforeSelectRow
事件句柄内部的禁用行 - 具有对multiselect列标题中的全选"复选框的支持,实现了
onSelectAll
事件句柄,该事件句柄修复了禁用行的选择.
- set "disabled" inside of
loadComplete
event handle - additionally prevent selection of disabled rows inside
beforeSelectRow
event handle - to have support of "select all" checkbox in the header of the multiselect column implement
onSelectAll
event handle which fix selection of disabled rows.
您可以在此处看到相应的演示.代码最重要的部分在这里:
The corresponding demo can you see here. The most important part of the code is here:
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
}
}
);
更新:免费jqGrid 支持hasMultiselectCheckBox
回调,该回调可以用于创建不适用于jqGrid的所有行的多选复选框.可以使用rowattr
来另外禁用某些行.结果,将以更简单的方式获得上述功能.对于带有本地数据(datatype: "local"
或loadonce: true
)的免费jqGrid,建议另外使用multiPageSelection: true
选项.选项multiPageSelection: true
将在分页时保留数组selarrrow
.它通过填充selarrrow
中的相应ID来预选择"某些行.请参见答案的更新部分和演示了解更多信息.
UPDATED: Free jqGrid supports hasMultiselectCheckBox
callback, which can be used to create multiselect checkboxes not for all rows of jqGrid. One can use rowattr
to disable some rows additionally. As the result one will get the described above functionality in more simple way. It's recommended to use multiPageSelection: true
option additionally for free jqGrid with local data (datatype: "local"
or loadonce: true
). The option multiPageSelection: true
will hold the array selarrrow
on paging. It allows "pre-select" some rows by filling the corresponding ids inselarrrow
. See UPDATED part of the answer and the answer with the demo for additional information.
这篇关于jqgrid:multiselect和禁用检查(有条件的)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!