【发布时间】:2011-06-02 16:57:03
【问题描述】:
jQgrid 行使用内联编辑模式进行编辑。 按 Enter 使用 http POST 将数据发送到服务器。 如果出现错误,POST 方法返回状态 400 Bad reguest。下面代码中的 errorofunc 在此显示错误 案子。 用户在行中更正数据并再次按回车键。
按下回车键被忽略,没有任何反应。如果返回 404 错误,看起来 Enter 键未绑定。 已编辑行中的更改已丢失,无法保存。
我尝试在errorfunc中设置
restoreAfterError = false; grid.restoreAfterErorr = false;
但出错后仍无法再次保存行。
400错误返回后如何保存正确的行数据?
<script type="text/javascript">
var lastSelectedRow;
$(function () {
var grid = $("#grid");
grid.jqGrid({
url: '/Grid/GetData',
datatype: "json",
mtype: 'POST',
scroll: 1,
multiselect: true,
multiboxonly: true,
scrollingRows : true,
autoencode: true,
colModel: [
{ name: 'Source', fixed: true, editable: true, width: 30 },
{ name: 'Est', fixed: true, editable: true, width: 271 },
{ name: 'Istopic', fixed: true, editable: true, width: 57 },
{name: 'Critical', fixed: true, editable: true, width: 50}
],
gridview: true,
pager: '#pager',
sortname: 'est',
viewrecords: true,
rowNum: 30,
sortorder: "asc",
editurl: '/Grid/Edit'
});
$("#grid").jqGrid('bindKeys', {
onEnter: function(rowid) {
doeditRow(rowid);
}
} );
});
function doeditRow(rowID) {
var grid2 = $("#grid");
if (rowID && rowID !== lastSelectedRow) {
grid2.jqGrid('restoreRow', lastSelectedRow);
lastSelectedRow = rowID;
}
invokeEditRow();
}
function errorfunc(rowID, response) {
// todo: why this does not allow Enter key to continue ase after error:
restoreAfterError = false;
$("#grid").restoreAfterErorr = false;
alert(response.responseText);
lastSelectedRow = rowID;
invokeEditRow();
return true;
}
function invokeEditRow() {
$("#grid").jqGrid('editRow', lastSelectedRow ,true,null, null, null, {},
null,
errorfunc
);
}
</script>
<div id="grid1container" style="width: 100%;">
<table id="grid">
</table>
<div id="pager">
</div>
</div>
更新:errrofunc 调用 editrow 哪个 根据 https://github.com/tonytomov/jqGrid/blob/master/js/grid.inlinedit.js 应再次设置回车键保存。 由于未知原因,这不 发生。
更新:在 errorfunc 网格中。改为
$("#grid").restoreAfterErorr = false;
根据奥列格的评论
【问题讨论】: