Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery JQGRID可以';t获取ajax参数的单元格值_Jquery_Ajax_Jqgrid - Fatal编程技术网

Jquery JQGRID可以';t获取ajax参数的单元格值

Jquery JQGRID可以';t获取ajax参数的单元格值,jquery,ajax,jqgrid,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:

我尝试内联更新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;
           });
      }
  }
尝试使用下面的答案

var rowData = jQuery("#list").getRowData(id);
var colData = rowData.Status;
单击选定单元格后发现(复选框尚未显示),但ajax直接将参数发送到服务器。为什么


回答

根据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;
         });
      }
    }
onCellSelect:function(){
var iCol=getColumnIndexByName($(this),'Status'),rows=this.rows,i,c=rows.length;
对于(i=1;i
我不知道为什么要使用
jQuery(“#list”).getRowData(id)['Status']
isChecked
变量的值已经为您提供了所需的结果。所以,为了解决你的主要问题,你可以使用

数据:“id=“+id+”&Status=“+isChecked+”&action=cekmark”,
或者,更好

数据:{id:id,状态:isChecked,操作:“cekmark”},

还有一个建议。您可以注册多个
单击
加载完成
中的事件处理程序。每个
都将获得自己的
单击事件处理程序。我建议您在整个网格中使用jqGrid注册的一个现有的
点击
处理程序。当您使用句柄时,它在selectRow
之前调用
。提供非常接近您所需的所有功能。您只需进行一些小的修改,并包括
$。ajax
调用以通知服务器复选框状态的更改。

您是否正在从服务器返回状态??我的意思是,您是否为从服务器返回的json中的“Status”键分配了任何内容?@Krishna Status值为“OK”。我尝试了第二种方法,但是值是
false
,所以ajax发送了错误的数据。我认为应该为“Status”键指定布尔值!您可以发布您向其发出ajax请求的服务器代码吗@nunui尝试删除格式化程序,因为我的案例需要基本复选框编辑。使用您的答案后,我发现(单次)单击之后没有任何事情发生(复选框未显示)。但如果双击(复选框仍未显示),ajax将以
状态发送到服务器:false
@nunu:抱歉,但我不明白您的意思。您是否首先尝试使用
数据:“id=“+id+”&Status=“+isChecked+”&action=cekmark”
而不是
数据:“id=“+id+”&Status=“+colData+”&action=cekmark”
?您是否尝试过在更改状态时执行哪些操作(它实现本地编辑)?您真的需要使用
edittype:“checkbox”``而不是
formatter:“checkbox”
?只有在格式化程序填充网格后才会执行
loadComplete`命令,但现在没有行处于编辑状态,因此代码
$(行[i].cells[iCol])。单击(.)
将不起作用。我已尝试将
colData更改为isChecked
参数可以发送。然后我想知道
isChecked
的值是多少,我调用
alert(isChecked)现在我得到的检查值是
true
不是
OK
。为什么?@nunu:because
isChecked=$(e.target).is(':checked')。所以它有布尔值。您可以使用
isChecked?“确定”:“
如果您愿意,请改为”。对于我的情况,我将在选择行之前将
更改为
onCellSelect
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;
         });
      }
    }