当multiselect选项设置为true时,为复选框列添加自定义格式化程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当multiselect选项设置为true时,为复选框列添加自定义格式化程序相关的知识,希望对你有一定的参考价值。
我使用jqgrid作为网格与multiselect:true属性。我想根据某些行值删除某些行的复选框(禁用/不允许检查)。我想在复选框模型上添加格式化程序以删除该列上的复选框
我尝试在处理之前访问内部的colModel,但我还没有看到jqgrid自动添加列名'cb'。因此我无法在colmodel中为'cb'注入格式化程序。
jqGrid({
multiselect: true,
beforeSelectRow: function() {
//called when tried to select one row.
//its not called when selectAll is called.
},
onSelectAll: function(rowids, status) {
//gets selected row ids when status is true
}
})
1)我想根据行值操作复选框的选择。
2)如果列的行为isApplicable = false,则复选框不应该是(可见/可选)
jqgrid版本:5.3.0
重要的是,您始终要包含您在问题文本中使用(可以使用)的jqGrid版本。重要的是要知道jqGrid的分支(free jqGrid,商业Guriddo jqGrid或版本<= 4.7的旧jqGrid)。
我开发的免费jqGrid fork包含一些可用于实现您的需求的选项/回调。
首先,您可以使用hasMultiselectCheckBox
回调来通知jqGrid,其中应创建多行(基于isApplicable
列的内容)multiselect复选框:
hasMultiselectCheckBox: : function (options) {
// options is object like below
// { rowid: rowid, iRow: irow, iCol: pos, data: item, checked: checked };
// one can use options.data to examine the data of the current row
return options.data != null && options.data.isApplicable;
}
即使行中没有复选框,也可以通过单击该行来选择行。 (顺便说一下,你可以使用multiselectPosition: "none"
根本没有带多选复选框的列。)因此你应该另外添加beforeSelectRow
回调,这会阻止选择isApplicable
等于false
的行:
beforeSelectRow: function (rowid) {
var item = $(this).jqGrid("getLocalRow", rowid);
if (item != null && !item.isApplicable) {
return true;
}
return false;
},
或者,如果你使用最新版本的免费jqGrid,你可以使用rowattr
将"jqgskipselect"
类添加到行,这些行不应该是可选的:
rowattr: function (item) {
if (!item.isApplicable) {
return { "class": "jqgskipselect" };
}
},
free jqGrid阻止选择具有类的行。在旧版本中,您可以使用禁用的类来阻止选择。在使用Bootstrap CSS的情况下使用jQuery UI CSS或"ui-state-disabled"
类是"disabled"
类。
以上是关于当multiselect选项设置为true时,为复选框列添加自定义格式化程序的主要内容,如果未能解决你的问题,请参考以下文章
当 edittext 设置为 setVisible(true) 时,带有选项卡的操作栏会上升
laravel jquery select2 multiselect - 初始化选定的元素