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

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

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

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

    var datajson = JSON.stringify (данные);

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


person Bebben    schedule 26.01.2011    source источник


Ответы (3)


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

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

ОБНОВЛЕНО: см. демонстрацию. Сначала выберите строку, измените значения, а затем нажмите кнопку «Сохранить текущую строку редактирования». Вы увидите, что изменения будут сохранены.

person Oleg    schedule 26.01.2011
comment
Извините, это не так. saveRow вызывает метод для сохранения строки, но ячейка все еще находится в режиме редактирования. - person Bebben; 26.01.2011
comment
@Bebben: Вы допустили ошибку в своей реализации. Я добавил демонстрацию, демонстрирующую, что использование saveRow работает. Если вам нужно сохранить данные на сервере вместо локального сохранения, вы должны использовать другие параметры saveRow: прочитайте точно ссылку на saveRow, которую я вам отправил. - person Oleg; 26.01.2011
comment
Спасибо Олег! Теперь работает как шарм! Я думаю, проблема заключалась в том, что моя сетка была в celledit, и прежде чем я смогу вызвать saveRow, я должен вызвать cellEdit. Теперь я начинаю с того, что устанавливаю все строки в режим редактирования и перед отправкой вызываю saveRow для всех строк. Спасибо! - person Bebben; 26.01.2011
comment
@Oleg: Спасибо ... Мне это помогло. +1 :) - person Hardik Mishra; 28.01.2013
comment
@HardikMishra: Я рад это знать. Добро пожаловать! Рекомендую дополнительно использовать keys: true опцию встроенного редактирования. Если вы используете новую версию jQuery, также может быть интересно использование нового события jQuery.unload. - person Oleg; 28.01.2013

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

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

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

(На основе ответа Олега и Как закрыть редактор ячеек? и 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
            }
        }               
    });
});
person Miha Pirnat    schedule 02.07.2015