Jquery JQGRID可以';t获取ajax参数的单元格值
我尝试内联更新jQgrid中指定单元格的行。 我使用ajax发送参数。 我可以获取id值,但我很难从名为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:
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:becauseisChecked=$(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;
});
}
}