JQGRID 无法获取 ajax 参数的单元格值

JQGRID can't get cell value for ajax parameter

我尝试内联更新 jQgrid 的指定单元格行。 我使用 ajax 发送参数。 我可以获取 id 值,但我很难从名为 Status 的列中获取单元格值。我下面的代码似乎不起作用。

{name:'Status', index:'Status', width:50,search:true,align : 'center',
 editable: true,edittype:"checkbox",editoptions: {value:"OK:"}, 
 stype:'text',searchoption:{sopt:['cn']}}

loadComplete: function () {
   var iCol = getColumnIndexByName($(this),'Status'),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');
         var rowData = jQuery("#list").getRowData(id);
         var colData = rowData['Status'];    

         $.ajax({
                 type   : "POST",
                 url    : "process1.php",
                 async  : false,
                 cache  : false,
                 data   : "id="+id+"&Status="+colData+"&action=cekmark",
                 success: function() {
                     $("#list").trigger("reloadGrid");
                     return this;
                     }
                 });
           return false;
           });
      }
  }

这是 ajax 结果:

id:50831
Status:
action:cekmark

尝试使用下面的答案

var rowData = jQuery("#list").getRowData(id);
var colData = rowData.Status;

点击选定的单元格后找到(复选框尚未显示)但 ajax 直接将参数发送到 server.why?


回答

根据 oleg 的回答,我更改了一些适合我的情况的脚本:

onCellSelect: function () {
   var iCol = getColumnIndexByName($(this),'Status'),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');
          var isChecked = isChecked? "OK" : "";
          $.ajax({
             type   : "POST",
             url    : "process1.php",
             async  : false,
             cache  : false,
             data   : "id="+id+"&Status="+isChecked+"&action=cekmark",
             success: function() {
                $("#list").setGridParam({datatype:'json', page:1}).trigger('reloadGrid'); //this make your grid reloaded without reload page
                //$("#list").trigger("reloadGrid"); 
                return this;
                }
             });
         return false;
         });
      }
    }

我不确定你为什么使用 jQuery("#list").getRowData(id)['Status']isChecked 变量的值已经为您提供了所需的结果。所以要解决你的主要问题,你可以使用

data: "id="+id+"&Status="+isChecked+"&action=cekmark",

或者,事件更好,

data: {id: id, Status: isChecked, action: "cekmark" },

再提一个建议。您在 loadComplete 中注册 多个 click 事件处理程序。每个 <input type="checkbox" ...> 都将获得自己的 click 事件处理程序。我建议您在整个网格中使用由 jqGrid 注册的 one existing click handler。它调用 beforeSelectRow 是你使用的句柄。 The answer provides the demo 可以满足您的所有需求。您只需进行少量修改并包含 $.ajax 调用以通知服务器有关复选框状态的更改。