Как вызвать событие beforeSubmitCell внутри события ondblClickRow - PullRequest
0 голосов
/ 02 января 2019

У меня вопрос, связанный с jqgrid v4.15.4. Я использовал событие beforeSubmitCell , чтобы вернуть новый массив, который будет опубликован на сервере. Также я сохранил параметры cellEdit: true , cellubdmit: 'remote' . По умолчанию, если ячейка jqGrid является редактируемой, один щелчок по этой ячейке переводит ее в режим редактирования. Как я знаю, это можно сделать с помощью ondblClickRow . Но как я могу вызвать beforeSubmitCell событие внутри ondblClickRow функция события.

для ссылок, я прочитал: Редактирование ячейки jQGrid при двойном щелчке строки

Дайте мне знать, если потребуется дополнительная информация?

1 Ответ

0 голосов
/ 02 января 2019

Если я правильно понимаю вашу проблему, вам следует не использовать опцию cellEdit: true (но все еще использовать cellsubmit: 'remote') и устанавливать cellEdit: true динамически передвызов методов редактирования ячеек (editCell, restoreCell, saveCell, prevCell или nextCell).Кроме того, вам придется дублировать операции клавиатуры (см. строки свободного кода jqGrid).Полученный код может выглядеть следующим образом:

ondblClickRow: function (rowid, iRow, iCol, e) {
    var $self = $(this), p = $self.jqGrid("getGridParam");
    p.cellEdit = true;
    $self.jqGrid("editCell", iRow, iCol, true);
    p.cellEdit = false;
},
afterEditCell: function (rowid, cmName, cellValue, iRow, iCol) {
    var getTdByColumnIndex = function (tr, iCol) {
            var $t = this, frozenRows = $t.grid.fbRows;

            tr = frozenRows != null && frozenRows[0].cells.length > iCol ?
                    frozenRows[tr.rowIndex] : tr;
            return tr != null && tr.cells != null ? $(tr.cells[iCol]) : $();
        },
        $td = getTdByColumnIndex.call(this, this.rows[iRow], iCol),
        $self = $(this),
        $t = this,
        p = $self.jqGrid("getGridParam");

    $("input, select, textarea", $td).on("keydown", function (e) {
        if (e.keyCode === 27) { //ESC
            p.cellEdit = true;
            $self.jqGrid("restoreCell", iRow, iCol);
            p.cellEdit = false;
        } else if (e.keyCode === 13 && !e.shiftKey) { //Enter
            p.cellEdit = true;
            $self.jqGrid("saveCell", iRow, iCol);
            p.cellEdit = false;
            return false;
        } else if (e.keyCode === 9) {
            if (!$t.grid.hDiv.loading) {
                p.cellEdit = true;
                if (e.shiftKey) {
                    $self.jqGrid("prevCell", iRow, iCol); //Shift TAb
                } else {
                    $self.jqGrid("nextCell", iRow, iCol); //Tab
                }
                p.cellEdit = false;
            } else {
                return false;
            }
        }
        e.stopPropagation();
    });
}

См. https://jsfiddle.net/OlegKi/Lm7akxz2/

...