Я проанализировал проблему.Причина в том, что строка используется для встроенного редактирования:
async : false, //?!?
(комментарий "?!?" Является исходным комментарием в коде jqGrid).Таким образом, в общем случае наложение, которое блокирует сетку, будет показано в начале запроса jQuery.ajax
, который сохраняет строку, но из-за async : false
графический интерфейс веб-браузера будет заблокирован до завершения ,В дескрипторе события complete
наложение будет скрыто, и пользователь ничего не увидит.Все веб-браузеры, кроме Firefox, не показывают оверлей.
Чтобы решить проблему без изменения кода jqGrid, можно использовать опцию ajaxRowOptions в jqGrid.Параметр задокументирован не в общем списке параметров jqGrid , а в конце документации saveRow .Использование
ajaxRowOptions: { async: true }
в качестве опции jqGrid или в качестве новой опции по умолчанию
$.extend($.jgrid.defaults, {
ajaxRowOptions: { async: true }
});
решит проблему в случае встроенного редактирования.
В случаеИспользование форматера 'Actions' Другая проблема из строки Существуют
if ( $('#'+gid).jqGrid('saveRow',rid, op.onSuccess,op.url, op.extraparam, saverow, op.onError,restorerow) ) {
$("tr#"+rid+" div.ui-inline-edit, "+"tr#"+rid+" div.ui-inline-del","#"+gid+ ".ui-jqgrid-btable:first").show();
$("tr#"+rid+" div.ui-inline-save, "+"tr#"+rid+" div.ui-inline-cancel","#"+gid+ ".ui-jqgrid-btable:first").hide();
}
Можно видеть, что здесь jqGrid использует saveRow
так же, как и асинхронная функция здесь.Если вы будете использовать ajaxRowOptions: { async: true }
, вам нужно будет сделать divs div.ui-inline-edit
и div.ui-inline-del
видимыми и скрыть div.ui-inline-save
и div.ui-inline-cancel
внутри вашего onSuccess
обработчика событий.
UPDATED : Извините, другой код - функции saverow , используемые в качестве параметра метода saveRow
, выполняют ту же работу.Поэтому я думаю, что все div будут отображаться / скрываться правильно без дополнительного кода в вашем onSuccess
обработчике событий.