在jqgrid中完成编辑

时间:2011-01-26 13:00:46

标签: javascript jquery jqgrid

我以下列方式使用jqgrid取得了巨大成功:

  1. 数据从服务器加载为JSON
  2. 用户进行内联编辑
  3. 单击保存按钮时,所有数据都使用以下序列进行序列化:

    var data = $(“#mygrid”)。getRowData();

    var datajson = JSON.stringify(data);

  4. 这种方法的问题在于,如果用户没有按下返回或离开编辑过的单元格,我将在我的json数据中获取输入元素。有没有办法结束编辑模式i jqgrid?

3 个答案:

答案 0 :(得分:5)

您可以使用saveRow保存数据。

要使用saveRow,您必须知道当前可编辑行的行ID。例如,您可以将当前编辑的rowid保存在变量中(在调用editRow之前)并使用该值来调用saveRow方法。

更新:请参阅the demo。首先选择一些行,修改值,然后单击“保存当前编辑行”按钮。您将看到更改将被保存。

答案 1 :(得分:0)

我通过触发" keydown"解决了这个问题。在元素上输入事件:

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

答案 2 :(得分:0)

我为每个单元格使用远程提交,因为我使用了" contenteditable" div为单元格编辑器(对于多行文本),我想用ctrl-enter完成单元格编辑。

(基于Oleg的回答以及How to close 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
            }
        }               
    });
});