jqGrid内联编辑:如果发布返回错误,如何再次保存
问题描述:
jQgrid行是使用内联编辑模式编辑的。 按Enter使用http POST将数据发送到服务器。 POST方法返回状态400错误的请求,如果有一些错误。下面的代码中的errorofunc在此 的情况下显示错误。 用户更正行中的数据,然后再次按下。jqGrid内联编辑:如果发布返回错误,如何再次保存
按回车被忽略,没有任何反应。如果返回404错误,它看起来像回车键没有绑定。 编辑行中的更改丢失,无法保存。
我试图设置在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>
UPDATE:errrofunc调用editrow这 根据 https://github.com/tonytomov/jqGrid/blob/master/js/grid.inlinedit.js 应该设置再次输入键保存。 由于不明原因,这不会发生 。
更新:在errorfunc网格。根据奥列格注释改为
$("#grid").restoreAfterErorr = false;
答
可以使用可变grid
的errorfunc
实现(grid.restoreAfterErorr
)内。 grid
是undefined
,你有排除异常。
修订:欧应更换alert(response.responseText);
到
$.jgrid.info_dialog($.jgrid.errors.errcap,'<div class="ui-state-error">'+
response.responseText +'</div>', $.jgrid.edit.bClose,{buttonalign:'right'});
看到同样风格的对话框,在标准情况下。内联编辑中的errorfunc
负责显示错误消息本身。
@Oleg:谢谢。我通过将'grid'更改为'$(“#grid”)'来更新测试用例。问题依然存在。为了测试这个,你可以使用我发给你的私人测试网址。首先输入30个以上的字符(Allikas)列并按回车。出现错误消息。编辑Allikas列以少于30个字符并再次按Enter键。此输入按下将被忽略,数据不会被保存。错误后如何保存数据?顺便说一句。对于未知的理由,即使网格。被使用,在网格中不会发生异常。线。数据库出现错误的适当警报框仍然出现。 – Andrus 2011-06-03 07:04:02
@安德鲁斯:你可以将'jquery.jqGrid.min.js'替换为'jquery.jqGrid.src.js'吗? – Oleg 2011-06-03 07:26:22
@安德鲁斯:我似乎开始明白你的网站有什么问题。你太频繁地进入编辑模式。例如在'errorfunc'里面你不应该调用'invokeEditRow'。此外,似乎如果按Enter键保存该行,则不仅保存该行,而且还会接收'keypress'事件以开始内联编辑(请参阅'bindKeys'),这会对非常陌生的行为产生影响。 – Oleg 2011-06-03 07:51:32