Как поймать клавиши клавиатуры, если активен jqueryUI datepicker - PullRequest
4 голосов
/ 27 сентября 2011

Столбец jqgrid содержит jqueryUI DataPicker, используемый в режиме встроенного редактирования.Если элемент ввода DataPicker имеет фокус и нажата клавиша Ctrl + S или какая-либо другая клавиша, body_onkeydown не выполняется: IE9 вызывает поведение по умолчанию ctrl + s (диалог сохранения).В FireFox body_onkeydown также не выполняется.

Как исправить этот код, чтобы ключи могли быть перехвачены, если у DatePicker есть фокус?

DatePicker определяется как:

    $(elem).datepicker({
        dateFormat: 'dd.mm.yy',
        autoSize: true,
        showOn: 'button', 
        changeYear: true,
        changeMonth: true,
        showButtonPanel: true,
        showWeek: true
    });

Используемый кодпоймать Ctrl + S нажатие клавиши:

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


function body_onkeydown(evt) {
    // Why this function is not executed if datepicker has focus?
    if (evt.ctrlKey) {
        switch (evt.keyCode) {
            case 83: $("#grid_savebutton").click(); break;         
              }
        cancel(evt);
        return false;
    }

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

1 Ответ

2 голосов
/ 27 сентября 2011

Хороший вопрос! В коде jqGrid вы можете оштрафовать иногда return false или stopPropagation внутри дескрипторов событий, которые я лично нахожу ненужными. В вашем случае проблема состоит в том, чтобы сделать строку 8237 из jquery.jqGrid.src.js (в версии 4.1.2) или строку 87 из grid.inlinedit.js (см. здесь ):

e.stopPropagation();

Если вы прокомментируете подобное, встроенное редактирование больше не остановит распространение события keydown и того, как вы можете увидеть на демо , вы сможете поймать Ctrl + S во время встроенного редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...