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

时间:2015-01-19 04:58:04

标签: jquery ajax jqgrid

我尝试内联更新指定单元格的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?


ANSWER

基于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;
         });
      }
    }

1 个答案:

答案 0 :(得分:0)

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

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

或者,事件更好,

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

还有一条建议。您在click内注册多个 loadComplete事件处理程序。每个<input type="checkbox" ...>都会获得自己的click事件处理程序。我建议你在整个网格中使用jqGrid注册的一个现有的 click处理程序。调用beforeSelectRow是否使用句柄。 The answer提供的the demo非常接近您所需要的所有内容。您只需进行少量修改并包含$.ajax调用,以通知服务器有关更改复选框状态的信息。