Aktivieren der Schaltfläche Speichern in JQ Grid mit InlineEditing und CellEdit

Hi Ich habe ein Raster, das die Zellbearbeitung und die Inline-Bearbeitung verwendet. Es wird im ClientArray @ gespeicher

$('#list').jqGrid({
    datatype: "local",
    colNames: ["Parameter Id", "Parameter Name", 'Parameter Value'],
    colModel: [
        { name: "Id", index: "Id", align: "left", key: true, editable: false,hidden:true, jmap: 0 },
        { name: "ParameterName", index: "ParameterName", align: "left", editable: false, jmap: 1 },
        { name: "ParameterValue", index: "ParameterValue", align: "left", editable: true, edittype: "text", editoptions: { maxlength: 100 }, editrules: {required: true }, jmap: 2 }
    ],

    pager: "#pager",
    rowNum: 100,
    rowList: [],
    pgbuttons: false,     // disable page control like next, back button
    pgtext: null,         // disable pager text like 'Page 0 of 10'
    viewrecords: true,   // disable current view record text like 'View 1-10 of 100'
    height: '100%',
    scrollOffset: 0,
    sortname: "Name",
    sortorder: "Asc",
    gridview: true,
    caption: 'Parameters',
    autowidth: true,
    hidegrid: false,
    loadonce: true,
    //beforeEditCell: function () {
    //    $("#list_ilsave").removeClass('ui-state-disabled');
    //    return;
    //},
    //afterEditCell: function (rowid, cellname, value, iRow, iCol) {
    //    $('#list').jqGrid('getCell', rowid, iCol).focus();
    //    return;
    //},
    width: totalWidth,
    cellEdit: true,
    cellsubmit: "clientArray"
});

$('#list').jqGrid('inlineNav', '#pager', {
        edit: false,
        add: false,
        del: false,
        save: true,
        savetext: 'Save',
        cancel: false
    });

Wenn ich eine Zelle bearbeite, bleibt die Schaltfläche zum Speichern deaktiviert. Wenn ich die Schaltfläche in beforeCellEdit manuell aktiviere, hat die bearbeitbare Zelle erst dann den Fokus, wenn Sie eine andere Zelle auswählen. Dieses Verhalten tritt nur im IE auf.

Ich habe versucht, beide Probleme einzeln in meinem auskommentierten Code zu beheben, und ich habe festgestellt, dass der Fokusverlust durch die Zeile @ verursacht wir

$("#list_ilsave").removeClass('ui-state-disabled');

Ich habe versucht, diese Zeile in beforeEditCell und afterEditCell zu platzieren. Dadurch verliert das Eingabefeld den Fokus.

Ich habe JQ Grid 4.4.4 verwendet und versucht, auf 4.6.0 zu aktualisieren, nachdem ich gelesen habe, dass es nach 4.4.4 Aktualisierungen für die Inline-Bearbeitung gibt.

AKTUALISIERE Ich habe mein Raster für die Verwendung von onSelectRow @ geänder

        onSelectRow: function (rowid) {
        var $grid = $('#list');
        var iRow = $("#" + rowid)[0].rowIndex;

        $grid.jqGrid('editRow', rowid, {
            keys: true,
            oneditfunc: function(rowid, response) {
                var $saveButton = $("#list_ilsave");

                if ($saveButton.hasClass('ui-state-disabled')) {
                    $saveButton.removeClass('ui-state-disabled');
                }

                markCellAsDirty(rowid, $grid);
                return true;
            },
            successfunc: function() {
                alert('success');
                return true;
            },
            aftersavefunc: function() {
                alert('after save');
                return true;
            },
            errorfunc: function() {
                alert('error');
                return true;
            }
        });
    },
    cellsubmit: "clientArray"

Aber ich kann keine der editRow-Ereignisse außer @ auslösen lassoneditfunc. Ich habe auch ein Problem mit dem Erhalten der geänderten Zellen.

Diese Methode markiert die Zellen als unsauber / bearbeitet

function markCellAsDirty(rowid, grid) {
    $(grid.jqGrid("setCell", rowid, "ParameterValue", "", "dirty-cell"));
    $(grid[0].rows.namedItem(rowid)).addClass("edited");
}

Ich versuche, die bearbeiteten Zellen wie folgt zu erhalten

var editedRows = $grid.getChangedCells('dirty');

Vor dem Posten von editedRows in einer AJAX-Methode auf meinem Server.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage