Кажется, что проблема, которую вы описываете, состоит в смешении небольшой ошибки в вашем коде и ошибки в коде jqGrid (см. Строки, начинающиеся с места ).
проблема в вашем коде состоит в том, что вы не правильно установили editParams
, как для addParams
.Правильное использование должно быть:
$("#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 использует в кнопке Сохранить (см. здесь ) только настройкуeditParams.extraparam
используются вместо использования чего-то вроде addParams.addRowParams.extraparam
.Я добавил keys: true
параметр в addParams.addRowParams
параметрах inlineNav
.Таким образом, вы увидите, что текущая реализация (v 4.3.0) jqGrid будет использовать addParams.addRowParams.extraparam
, если пользователь сохранит изменения, нажав Enter и будет использовать editParams.extraparam
в случае сохранениястрока кнопкой «Сохранить» кнопок навигатора.
ОБНОВЛЕНО : Я проверил код и обнаружил еще одну ошибку в jqGrid v. 4.3.0.Я предложил в запрос функции ввести настройку $.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]);
Как видно из демонстрационная версия , все исправно работает после исправления ошибки.
ОБНОВЛЕНО 2 : вышеприведенное исправление идентично исправлению , которое по-прежнему неверно.Чтобы исправить ошибку, нужно сделать больше изменений в коде.Например, строки 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 : я отправил мое предложение на трианд о проблеме "Удалить",Смотрите ту же демонстрацию, в которой используется исправление здесь .