JQgrid复选框onclick更新数据库

JQgrid复选框onclick更新数据库,jqgrid,Jqgrid,我在JqGrid中有一个复选框列,它是从DB加载的,所以在加载时它要么被选中,要么不被选中 我想要的是:若用户选中或取消选中复选框,我想同时更新数据库。我不想让用户按回车键或任何东西。只需单击一次并将操作发送到DB 名称:'Aktiv',索引:'Aktiv',宽度:100,编辑类型:'checkbox',对齐:'center',格式化程序:'checkbox',可编辑:true,格式化选项:{disabled:false}您可以在loadComplete中设置单击事件处理程序: loadComp

我在JqGrid中有一个复选框列,它是从DB加载的,所以在加载时它要么被选中,要么不被选中

我想要的是:若用户选中或取消选中复选框,我想同时更新数据库。我不想让用户按回车键或任何东西。只需单击一次并将操作发送到DB


名称:'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);
    });
}