我尝试内联更新指定单元格的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;
});
}
}
答案 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
调用,以通知服务器有关更改复选框状态的信息。