您描述的问题似乎是您的代码中的小错误和 jqGrid 代码中的错误的混合(参见以the place 开头的行)。
您的代码中的问题是您没有像设置addParams 那样正确设置editParams。正确的用法应该是:
$("#grid").jqGrid('inlineNav', '#grid_toppager', {
addParams: {
useDefValues: true,
addRowParams: {
keys: true,
extraparam: { _dokdata: FormData }
}
},
editParams: {
extraparam: { _dokdata: FormData }
},
add: true,
edit: false,
save: true,
cancel: true
});
function FormData() {
return JSON.stringify($("#_form").serializeArray());
}
jqGrid当前版本代码中的问题在我看来是jqGrid在
保存按钮(参见here)仅使用editParams.extraparam 的设置,而不使用addParams.addRowParams.extraparam 之类的设置。我在inlineNav 的addParams.addRowParams 参数中添加了keys: true 选项。因此,您将看到 jqGrid 的当前实现(v 4.3.0)将使用 addParams.addRowParams.extraparam,如果用户将通过按 Enter 来保存更改,并且在保存的情况下将使用 editParams.extraparam导航器按钮的“保存”按钮所在的行。
更新:我测试了代码并在 jqGrid v. 4.3.0 中发现了另一个错误。我建议在the feature request 中引入$.jgrid.inlineEdit 设置,它可以像其他非常实用的设置$.jgrid.edit 一样使用,但在内联而不是表单编辑的情况下。功能请求已实现
在 jqGrid 4.3.0 中,但实现包含一个错误。
要修复该错误,应将33、117 和304 替换为
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
到
o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
从the demo看你怎么看,修复bug后一切正常。
更新 2:上述修复与 the fix 相同,但仍然不正确。要修复错误,必须对代码进行更多更改。例如,32-36 行(editRow 内部)可以更改为
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
o = settings;
}
例如下面的
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
settings.keys = false; // keys is args[0] and it's an object
o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
o = settings;
}
以同样的方式116-120 行(saveRow 内部)
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
o = settings;
}
可以改成
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
settings.successfunc = null; // successfunc is args[0] and it's an object
o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
o = settings;
}
还有304一行
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
可以改成
o = $.extend(true, {afterrestorefunc: null}, $.jgrid.inlineEdit, args[0]);
更新 3:我向 trirand 发布了关于“删除”问题的 my suggestion。查看使用修复 here 的相同演示。