Завершение редактирования в jqgrid

Я использую jqgrid с большим успехом следующим образом:

  1. данные загружаются с сервера как JSON
  2. пользователь делает встроенное редактирование
  3. при нажатии кнопки сохранения все данные сериализуются с помощью:

    var data = $("#mygrid").getRowData();

    var datajson = JSON.преобразовать в строки(данных);

проблема с этим aproach заключается в том, что я получу входные элементы в моих JSON-данных, если пользователь не нажал return или не отошел от редактируемой ячейки. Есть ли способ завершить режим редактирования i jqgrid?

3 ответов


можно использовать saveRow сохранить данные.

использовать saveRow вы должны знать идентификатор строки текущей редактируемой строке. Например, вы можете сохранить rowid текущего редактирования в переменной (перед вызовом editRow) и использовать значение для вызова saveRow метод.

обновление: посмотреть демо. Сначала выберите некоторую строку, измените значения, а затем нажмите " сохранить текущее редактирование кнопка "строка". Вы увидите, что изменения будут сохранены.


Я решил это, вызвав "keydown" введите событие на элементе:

editoptions: {
                    dataInit: function(elem) {
                        $(elem).datetimepicker({
                            dateFormat: "yy-mm-dd",
                            onClose: function(datetimeText, datepickerInstance) {
                                $(elem).trigger($.Event( "keydown", { keyCode: $.ui.keyCode.ENTER } ))
                            }
                        });
                    }
                }

Я использую remote submit для каждой ячейки, и поскольку я использовал "contenteditable" div для редактора ячеек (для многострочного текста), я хотел закончить редактирование ячейки с помощью ctrl-enter.

(на основе ответа Олега и как закрыть cell-editor? и http://www.trirand.com/jqgridwiki/doku.php?id=wiki:cell_editing)

$(document).ready(function() {
    var grid,currentCell;
    $(".jqGrid_wrapper").on("keydown","div[contenteditable]",function (e) { 
        if (e.ctrlKey && e.keyCode == 13) 
        { 
            grid.jqGrid("saveCell",currentCell.iRow,currentCell.iCol);
            return false; 
        }

        return true; 
    });
    grid=$("#table_list_2");
    grid.jqGrid({
        url: ...
        cellEdit: true,
        cellsubmit: 'remote',
        cellurl: '..',    

        beforeEditCell: function(rowid, cellname, value, iRow, iCol) {
            currentCell={
                   rowid:rowid, cellname:cellname, value:value, iRow:iRow, iCol:iCol
            }
        }               
    });
});