我的JqGrid中有一个复选框列,它从DB加载,因此在加载时检查或不检查。
我想要的是:如果用户正在检查或取消选中复选框,我想同时更新数据库。我不希望用户按Enter或任何东西。只需单击一下即可向DB发送操作
name:'Aktiv',index:'Aktiv',width:100,edittype:'checkbox',align:'center',formatter:“checkbox”,editable:true,formatoptions:{disabled:false}
答案 0 :(得分:16)
您可以在click
:
loadComplete
事件处理程序
loadComplete: function () {
var iCol = getColumnIndexByName ($(this), 'Aktiv'), rows = this.rows, i,
c = rows.length;
for (i = 1; i < c; i += 1) {
$(rows[i].cells[iCol]).click(function (e) {
var id = $(e.target).closest('tr')[0].id,
isChecked = $(e.target).is(':checked');
alert('clicked on the checkbox in the row with id=' + id +
'\nNow the checkbox is ' +
(isChecked? 'checked': 'not checked'));
});
}
}
,其中
var getColumnIndexByName = function(grid, columnName) {
var cm = grid.jqGrid('getGridParam', 'colModel'), i, l;
for (i = 1, l = cm.length; i < l; i += 1) {
if (cm[i].name === columnName) {
return i; // return the index
}
}
return -1;
};
您应使用jQuery.ajax向服务器发送有关更新复选框状态的信息,而不是alert
。
您可以看到演示here。
答案 1 :(得分:1)
loadComplete:function()中的一个小修正。 在演示中,您可以发现即使在选中复选框后,如果您在该单元格中的复选框外单击,则该值将从“true”更改为“false”。
要避免这种情况,请执行以下操作,只需将焦点完全放在复选框上。
for (i = 1; i < c; i += 1) {
$(('input[type="checkbox"]'),rows[i].cells[iCol]).click(function (e) {
var id = $(e.target).closest('tr')[0].id,
isChecked = $(e.target).is(':checked');
alert('clicked on the checkbox in the row with id=' + id +
'\nNow the checkbox is ' +
(isChecked? 'checked': 'not checked'));
});
}
并感谢答案:-)(@ Oleg)帮助了我很多......当然......;)
答案 2 :(得分:0)
根据复选框
更改其他列的值var weightedAvgPriceIndex = getColumnIndexByName($(this), 'WeightedAveragePrice'),
rows = this.rows,
i,
c = rows.length;
for (i = 1; i < c; i += 1) {
$(('input[type="checkbox"]'),rows[i].cells[iCol]).click(function (e) {
var id = $(e.target).closest('tr')[0].id;
isChecked = $(e.target).is(':checked');
var x = $('#' + id + ' td:eq(' + weightedAvgPriceIndex + ')').text();
$('#' + id + ' td:eq(' + weightedAvgPriceIndex + ')').text(Math.abs(x) + 10);
});
}