I agree that it's a problem because the option keys: true
register keydown
event handler which process both Enter and Esc. You can't just inform jqGrid to process Enter, but don't process Esc.
如果你不打电话restoreRow
在你的代码中,那么你可能可以通过使用来解决你的问题beforeCancelRow
您可以在其中定义回调$.jgrid.inlineEdit
.
$.extend(true, $.jgrid.inlineEdit, {
beforeCancelRow: function () { // the parameters options and rowid can be used
return false;
}
});
上面的代码将不允许restoreRow
根本不。您可以通过包含一些验证来修改代码。
您还有一个选择:不使用keys: true
,但是注册你自己的keydown
所有处理程序<input>
and <select>
编辑行中的字段。你可以在以下位置执行此操作oneditfunc
打回来。看源代码 https://github.com/tonytomov/jqGrid/blob/v4.7.0/js/grid.inlinedit.js#L112-L134 of keydown
jqGrid 使用的处理程序。你只需要打电话saveRow
的情况下e.keyCode === 13
。所需rowid
您可以从外部范围获取(如果您在oneditfunc
)或从e.target
: $(e.target).closest("tr.jqgrow").attr("id")
.
另一种选择:您可以添加一些类,例如jqgrid-new-row
(这是使用的类addRow http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#addrow方法)到行(<tr>
) 调用后直接addRowData
($("#" + dataIds[dataIds.length - 1]).addClass("jqgrid-new-row")
)。你应该添加afterrestorefunc
回调到editRow
你称之为。里面的afterrestorefunc
你可以测试该行是否有jqgrid-new-row
上课和通话delRowData
排在案件中。顺便说一句,如果你添加课程jqgrid-new-row
名称(或使用addRow
代替addRowData
)然后删除取消的行将自动完成restoreRow
(see 代码片段 https://github.com/tonytomov/jqGrid/blob/v4.7.0/js/grid.inlinedit.js#L422-L427).
您甚至可以无条件地执行此操作,无需对类进行任何测试jqgrid-new-row
如果上面的代码有效only如果编辑新添加的行。所以调用editRow
可能像下面这样
return _this.table.jqGrid("editRow", dataIds[dataIds.length - 1], {
keys: true,
url: "clientArray",
aftersavefunc: function(rowId) {
return retypeColumnValues.call(table, rowId);
},
afterrestorefunc: function(rowId) {
_this.table.jqGrid("delRowData", rowId); // delete after cancel editing
}
});