javascript – 如果jqueryUI datepicker处于活动状态,如何捕获键盘键

jqgrid列包含在内联编辑模式下使用的
jqueryUI DataPicker.

如果DataPicker输入元素具有焦点并且按下了Ctrl S或其他某个键,则不执行body_onkeydown:IE9调用ctrl的默认行为(保存对话框).在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();
}

最佳答案 这是一个很好的问题!在jqGrid的代码中你可以在某些时候返回false或
stopPropagation内部的事件句柄,我个人觉得不需要.在你的情况下,问题是jquery.jqGrid.src.js的行8237(在版本4.1.2中)或grid.inlinedit.js的行87(见
here):

e.stopPropagation();

如果您发表评论,内联编辑将不再停止传播keydown事件以及您在the demo上可以看到的内容,您将能够在内联编辑期间捕获Ctrl S.

点赞