jQgrid:禁用复选框和行(有条件的)
jQgrid: Disable checkbox and row (conditional)
基于从 PHP 数据数组传递的 flag_status
,我需要禁用行和复选框。另外防止选择禁用的行以支持多选列
的 header 中的 select all
复选框
jQuery("#grid").jqGrid({
url:call_url,
datatype: "json",
height: 'auto',
rowNum: 20,
rowList: [20,30,40],
colNames:[<?php echo $col;?>],
colModel:[
{name:'USER_ID',index:'USER_ID', align:'center',search:false,hidden:true,key:true},
{name:'PROJECT_NAME',index:'PROJECT_NAME', align:'center',search:false,hidden: true},
{name:'EMP_NAME',index:'EMP_NAME', sortable:true,summaryType:'count',summaryTpl : 'Total ({0}) Resource Hours' },
<?php for($i=1;$i<=count($cal_arr);$i++) {?>
{name:'<?php echo $i;?>',index:'<?php echo $i;?>',search:false,align:"center",sortable:false ,width:80 },
<?php } ?>
],
pager: "#page",
multiselect: true,
shrinkToFit :true,
autowidth: true,
viewrecords: true,
grouping: true,
groupingView : { groupField : ['PROJECT_NAME'],
groupColumnShow : [false],
groupText : ['<b>{0}</b>'],
groupCollapse : false,
groupOrder: ['asc'],
groupSummary : [true],
showSummaryOnHide: true,
groupDataSorted : true },
sortname: 'EMP_NAME',
caption: "Programatically block selection of some grid row',
gridComplete: function () {
var recs = $("#grid").getGridParam("records");
$( ".mycontent" ).remove();
if (recs == 0 || recs == null) {
$('#grid').after("<div class='mycontent' style='color:red;text-align:center'>No Record Found</div>");
$("#btn_submit").hide();
}
},
loadComplete: function() {
// we make all even rows "protected", so that will be not selectable
var cbs = $("tr.jqgrow > td > input.cbox:even", jQuery("#grid")[0]);
cbs.attr("disabled", "disabled");
},
beforeSelectRow: function(rowid, e) {
var cbsdis = $("tr#"+rowid+".jqgrow > td > input.cbox:disabled", jQuery("#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", jQuery("#grid")[0]);
cbs.removeAttr("checked");
//modify the selarrrow parameter
jQuery("#grid")[0].p.selarrrow = jQuery("#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
}
}
})
感谢@Oleg 小demo,但不完全符合以下要求
不能将 key:true
用于 flag_status
,因为它的 bieng 用于 user_id
此处禁用所有偶数行,因此将无法选择,但仅当值为flag_status = 1
时才需要禁用。如何在 jQgrid 中传递该值并禁用行(添加 class ui-state-disabled
)并防止选中复选框(使其也被禁用)?
HTML结构:
<tr class="ui-widget-content jqgrow ui-row-ltr" tabindex="-1" id="13234" role="row" aria-selected="false">
<td aria-describedby="grid_cb" style="text-align:center;width: 20px;" role="gridcell">
<input type="checkbox" name="jqg_grid_13234" class="cbox" id="jqg_grid_13234" role="checkbox" disabled="disabled">
</td>
</tr>
此处 USER_ID
设置为 <tr>
和 <input>
,而 flag_status
应设置为 <tr>
,USER_ID
设置为 [=21] =].如果 flag_status 值为 1
,则应将 class ui-state-disabled
添加到 <tr>
中,从而禁用 <input>
。
版本 - jqGrid 4.6.0
你引用的我的demo已经很老了。我将其修改为 the following 更符合您的要求。
我在演示中使用
rowattr: function (item) {
if (parseInt(item.ID, 10) % 3 === 0) {
return {"class": "ui-state-disabled ui-jqgrid-disablePointerEvents"};
}
},
beforeSelectRow: function (rowid, e) {
if ($(e.target).closest("tr.jqgrow").hasClass("ui-state-disabled")) {
return false; // not allow select the row
}
return true; // allow select the row
}
对于 class ui-jqgrid-disablePointerEvents
有以下 CSS 规则:
.ui-jqgrid-disablePointerEvents {
pointer-events: none;
}
您可以轻松修改 rowattr
的代码,以便根据 item.flag_status
的值禁用行,而不是我在上面的演示中使用的 item.ID
。
基于从 PHP 数据数组传递的 flag_status
,我需要禁用行和复选框。另外防止选择禁用的行以支持多选列
select all
复选框
jQuery("#grid").jqGrid({
url:call_url,
datatype: "json",
height: 'auto',
rowNum: 20,
rowList: [20,30,40],
colNames:[<?php echo $col;?>],
colModel:[
{name:'USER_ID',index:'USER_ID', align:'center',search:false,hidden:true,key:true},
{name:'PROJECT_NAME',index:'PROJECT_NAME', align:'center',search:false,hidden: true},
{name:'EMP_NAME',index:'EMP_NAME', sortable:true,summaryType:'count',summaryTpl : 'Total ({0}) Resource Hours' },
<?php for($i=1;$i<=count($cal_arr);$i++) {?>
{name:'<?php echo $i;?>',index:'<?php echo $i;?>',search:false,align:"center",sortable:false ,width:80 },
<?php } ?>
],
pager: "#page",
multiselect: true,
shrinkToFit :true,
autowidth: true,
viewrecords: true,
grouping: true,
groupingView : { groupField : ['PROJECT_NAME'],
groupColumnShow : [false],
groupText : ['<b>{0}</b>'],
groupCollapse : false,
groupOrder: ['asc'],
groupSummary : [true],
showSummaryOnHide: true,
groupDataSorted : true },
sortname: 'EMP_NAME',
caption: "Programatically block selection of some grid row',
gridComplete: function () {
var recs = $("#grid").getGridParam("records");
$( ".mycontent" ).remove();
if (recs == 0 || recs == null) {
$('#grid').after("<div class='mycontent' style='color:red;text-align:center'>No Record Found</div>");
$("#btn_submit").hide();
}
},
loadComplete: function() {
// we make all even rows "protected", so that will be not selectable
var cbs = $("tr.jqgrow > td > input.cbox:even", jQuery("#grid")[0]);
cbs.attr("disabled", "disabled");
},
beforeSelectRow: function(rowid, e) {
var cbsdis = $("tr#"+rowid+".jqgrow > td > input.cbox:disabled", jQuery("#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", jQuery("#grid")[0]);
cbs.removeAttr("checked");
//modify the selarrrow parameter
jQuery("#grid")[0].p.selarrrow = jQuery("#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
}
}
})
感谢@Oleg 小demo,但不完全符合以下要求
不能将 key:true
用于 flag_status
,因为它的 bieng 用于 user_id
此处禁用所有偶数行,因此将无法选择,但仅当值为flag_status = 1
时才需要禁用。如何在 jQgrid 中传递该值并禁用行(添加 class ui-state-disabled
)并防止选中复选框(使其也被禁用)?
HTML结构:
<tr class="ui-widget-content jqgrow ui-row-ltr" tabindex="-1" id="13234" role="row" aria-selected="false">
<td aria-describedby="grid_cb" style="text-align:center;width: 20px;" role="gridcell">
<input type="checkbox" name="jqg_grid_13234" class="cbox" id="jqg_grid_13234" role="checkbox" disabled="disabled">
</td>
</tr>
此处 USER_ID
设置为 <tr>
和 <input>
,而 flag_status
应设置为 <tr>
,USER_ID
设置为 [=21] =].如果 flag_status 值为 1
,则应将 class ui-state-disabled
添加到 <tr>
中,从而禁用 <input>
。
版本 - jqGrid 4.6.0
你引用的我的demo已经很老了。我将其修改为 the following 更符合您的要求。
我在演示中使用
rowattr: function (item) {
if (parseInt(item.ID, 10) % 3 === 0) {
return {"class": "ui-state-disabled ui-jqgrid-disablePointerEvents"};
}
},
beforeSelectRow: function (rowid, e) {
if ($(e.target).closest("tr.jqgrow").hasClass("ui-state-disabled")) {
return false; // not allow select the row
}
return true; // allow select the row
}
对于 class ui-jqgrid-disablePointerEvents
有以下 CSS 规则:
.ui-jqgrid-disablePointerEvents {
pointer-events: none;
}
您可以轻松修改 rowattr
的代码,以便根据 item.flag_status
的值禁用行,而不是我在上面的演示中使用的 item.ID
。