JQgrid复选框onclick更新数据库
我在JqGrid中有一个复选框列,它是从DB加载的,所以在加载时它要么被选中,要么不被选中 我想要的是:若用户选中或取消选中复选框,我想同时更新数据库。我不想让用户按回车键或任何东西。只需单击一次并将操作发送到DBJQgrid复选框onclick更新数据库,jqgrid,Jqgrid,我在JqGrid中有一个复选框列,它是从DB加载的,所以在加载时它要么被选中,要么不被选中 我想要的是:若用户选中或取消选中复选框,我想同时更新数据库。我不想让用户按回车键或任何东西。只需单击一次并将操作发送到DB 名称:'Aktiv',索引:'Aktiv',宽度:100,编辑类型:'checkbox',对齐:'center',格式化程序:'checkbox',可编辑:true,格式化选项:{disabled:false}您可以在loadComplete中设置单击事件处理程序: loadComp
名称:'Aktiv',索引:'Aktiv',宽度:100,编辑类型:'checkbox',对齐:'center',格式化程序:'checkbox',可编辑:true,格式化选项:{disabled:false}您可以在
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'));
});
}
}
loadComplete:函数(){
var iCol=getColumnIndexByName($(this),'Aktiv'),rows=this.rows,i,
c=行数。长度;
对于(i=1;i
在哪里
var getColumnIndexByName=函数(网格,columnName){
var cm=grid.jqGrid('getGridParam','colModel'),i,l;
对于(i=1,l=cm.长度;i
您不应使用警报
向服务器发送有关更新复选框状态的信息
您可以看到一个演示。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'));
});
}
(i=1;i{
$('input[type=“checkbox”]”),行[i]。单元格[iCol])。单击(函数(e){
var id=$(e.target).closest('tr')[0].id,
isChecked=$(e.target).is(':checked');
警报('单击id='+id行中的复选框+
“\n复选框现在是”+
(已检查?'checked':'notchecked');
});
}
谢谢你的回答:-)(@Oleg)帮了我很大的忙……当然是及时 根据复选框的单击更改其他列的值
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);
});
}
var-weightedAvgPriceIndex=getColumnIndexByName($(此),“WeightedAveragePrice”),
rows=this.rows,
我
c=行数。长度;
对于(i=1;i
工作正常,现在我需要弄清楚如何将动作进一步发送到控制器,控制器将进一步发送到DB。哦,我想我现在明白了。太棒了。。非常感谢+1:)@HardikMishra:不客气!目前,我不希望对单击事件进行多重绑定。只要在整个网格上单击一下就足够了。查看或@Oleg如何使其只关注复选框?@NewHistoricForm:对不起,我不明白你的意思。无论如何,这个答案是老生常谈的。我从更好的地方找到了解决办法。这似乎不起作用。使用此代码时不会触发click事件。请告知。
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);
});
}