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
调用以通知服务器有关复选框状态的更改。
我尝试内联更新 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
调用以通知服务器有关复选框状态的更改。