Как сохранить в добавить и редактировать формы, нажав Ctrl + S в jqgrid - PullRequest
2 голосов
/ 23 октября 2011

jqgrid редактирует и добавляет формы, содержащие текстовые области, которые можно редактировать и вводить, добавляет к ним новую строку.

Как разрешить Ctrl + S сохранять редактирование и добавлять формы, точно так же, как нажать кнопку «Сохранить» в этих формах?

Для встроенного редактирования я смог добавить кнопку Сохранить на панель инструментов jqgrid и использовать

    case 83: $("#grid_savebutton").click(); break;

В событии body onkeydown для имитации нажатия на эту кнопку с помощью Ctrl + S

Как разрешить также сохранять в редакторе и добавлять формы по Ctrl + S?

Обновление

Я добавил код

        case 83: saveb = $("#TblGrid_" + "grid"+ "_2 #sData");
            if (saveb.length > 0 ) {
                   evt.stopPropagation();
                   return;
                  }
            $("#grid_savebutton").click(); 
            break;

к телу на обработчик. После первого открытия формы редактирования этот код всегда находит, что кнопка sData существует, и перестает вызывать grid_savebutton. Похоже, кнопка sData существует, даже если форма редактирования / добавления закрыта. Как это исправить, чтобы, если форма редактирования / добавления не открыта, была выполнена $ ("# grid_savebutton"). Click ()?

Update2

используемые привязки клавиш:

            jQuery.extend(jQuery.jgrid.edit, {
               savekey: [true, 13],
               recreateForm: true,
               closeOnEscape: true,
               reloadAfterSubmit: false,
               beforeShowForm: function ($form) {
                 var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8));
                 $("#editmod" + gridIdEncoded).bind( 'keydown', beforeShowFormHandler);
                  },

               onClose: function () {
                 var gridIdEncoded = 'grid'; // $.jgrid.jqID($form[0].id.substring(8));
                 $("#editmod" + gridIdEncoded).unbind( 'keydown', beforeShowFormHandler);
                  }
            });


    var beforeShowFormHandler = function (e) {
        var gridIdEncoded = 'grid';
        if (e.ctrlKey && e.which === 83) { // 83 - 's'
          $("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
          return false;
          }
    };

привязка глобального ключа:

$(function () {
    $("html").keydown(body_onkeydown);
});


function body_onkeydown(evt) {
    var saveb;
    if (evt.ctrlKey) {
        switch (evt.keyCode) {
            case 83: 
              saveb = $("#TblGrid_" + "grid" + "_2 #sData");
                // todo: saveb.length > 0 is always true after form is opened first time: 
                if (saveb.length > 0) return;
                $("#grid_savebutton").click(); break;
               }
        cancel(evt);
        return false;
    }
}

function cancel(evt) {
    evt.returnValue = false;
    evt.keyCode = 0;
    evt.cancelBubble = true;
    evt.preventDefault();
    evt.stopPropagation();
}

Update3

HTML-редактор TinyMCE присоединяется к элементам textarea в форме в событии afterShowForm с использованием

    $('.htmleditor', formSelector).attr('cols', '50').attr('rows', '15').tinymce({
        theme: "advanced",
        language: "et",
        theme_advanced_buttons2: "",
        theme_advanced_buttons3: "",
        theme_advanced_buttons1: "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter," +
"justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,|,cut ,copy,paste,undo,redo" +
"link,unlink,image,cleanup,code,hr,|,removeformat,formatselect,|,fontselect,fontsizeselect," +
"sub,sup,|,forecolor,backcolor,forecolorpicker,backcolorpicker,charmap,visualaid," +
"anchor,blockquote"
    });
}

Ctrl + S в textarea заставляет стандартное диалоговое окно сохранения IE9 появляться в этом случае. Как разрешить Ctrl + S также сохранять форму в tinyMCE?

1 Ответ

2 голосов
/ 23 октября 2011

Вы можете зарегистрировать дополнительный обработчик событий keydown внутри beforeShowForm . Код может быть следующим:

beforeShowForm: function ($form) {
    // $form[0].id is like "FrmGrid_list"
    var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8));
    $("#editmod" + gridIdEncoded).keydown(function (e) {
        if (e.ctrlKey && e.which === 83) { // 83 - 's'
            $("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
            return false; // stop propagation
        }
    });
}

Вы можете посмотреть живое демо здесь . Поскольку я использую локальное редактирование без установки editurl, вы видите сообщение об ошибке при нажатии Ctrl + S в форме редактирования. Это значит, что отправка будет огненной, но не удачной.

ОБНОВЛЕНО : посмотрите на демоверсию . При нажатии Ctrl + S отображается предупреждение "Ctrl-S in body", если форма редактирования закрыта, и попробуйте отправить форму, если форма редактирования открыта. Разве это не то, что вам нужно? В коде (см. Ниже) я использовал keydown из пространства имен formEvent (просто свободное имя)

$("#list").jqGrid ('navGrid', '#pager',
    {add: false, del: false, refresh: true, view: false},
    {beforeShowForm: function ($form) {
        // $form[0].id is like "FrmGrid_list"
        var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8));
        $("#editmod" + gridIdEncoded).bind('keydown.formEvent', function (e) {
            if (e.ctrlKey && e.which === 83) { // 83 - 's'
                $("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
                return false;
            }
        });
    },
    onClose: function (formselector) {
        $(formselector).unbind('keydown.formEvent');
    }}, {}, {}, {multipleSearch: true, overlay: false});

$("html").keydown(function (e) {
    if (e.ctrlKey && e.which === 83) { // 83 - 's'
        alert("Ctrl-S in body");
        return false;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...