JQgrid复选框onclick更新数据库

时间:2011-08-26 17:27:30

标签: jqgrid

我的JqGrid中有一个复选框列,它从DB加载,因此在加载时检查或不检查。

我想要的是:如果用户正在检查或取消选中复选框,我想同时更新数据库。我不希望用户按Enter或任何东西。只需单击一下即可向DB发送操作

name:'Aktiv',index:'Aktiv',width:100,edittype:'checkbox',align:'center',formatter:“checkbox”,editable:true,formatoptions:{disabled:false}

3 个答案:

答案 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);
    });
}