【问题标题】:How to fire a keyboard shortcut function in JavaScript?如何在 JavaScript 中触发键盘快捷键功能?
【发布时间】:2015-04-01 10:26:04
【问题描述】:

我的网站中有记录功能。如果用户点击 Ctrl+Alt+R 将开始录制。现在我想在我的 html 页面中添加一个名为 RECORD 的按钮,以便用户点击该按钮时开始录制。

<button type="submit" class="btn btn-primary" data-toggle="tooltip" data-placement="top" onclick="record_session()" title="Start Recording">Record</button>

在我下面的函数中

function record_session(){
    //how can i trigger or initiate  ctrl+alt+r here??
}

【问题讨论】:

    标签: javascript twitter-bootstrap keyboard-shortcuts


    【解决方案1】:

    如果你使用 jQuery,你可以添加按键事件:

    $(document).keypress(function(e) {
        if (e.which === 114 && e.ctrlKey && e.altKey) {
            record_session();
        }
    });
    

    更新

    var enable_keypress = false;
    function record_session(){
        enable_keypress = true;
    }
    $(document).keypress(function(e) {
        if (enable_keypress) {
            if (e.which === 114 && e.ctrlKey && e.altKey) { // ctrl+alt+r
    
            }
        }
    });
    

    更新 2

    要触发键盘事件,你可以使用这个:

    jQuery:

    function keydown(ctrl, alt, shift, which, key) {
        var e = $.Event("keydown");
        e.ctrlKey = ctrl;
        e.altKey = alt;
        e.shiftKey = shift;
        if (typeof which === 'string') {
            key = which;
            which = key.toUpperCase().charCodeAt(0);
        }
        e.key = key;
        e.which = e.keyCode = which;
        return e;
    }
    function keypress(key) {
        var e = $.Event("keypress");
        e.key = key;
        e.which = e.keyCode = 0;
        return e;
    }
    function shortcut({
        ctrl = false,
        alt = false,
        shift = false,
        which,
        key
    }) {
        var doc = $(document.documentElement || window);
        if (typeof which === 'string') {
            key = which;
            which = key.toUpperCase().charCodeAt(0);
        }
        doc.trigger(keydown(ctrl, alt, shift, which, key));
        doc.trigger(keypress(key));
    }
    

    您可以使用快捷键来触发 keydown 和 keypress:

    shortcut({ctrl: true, alt: true, which: 'r'});
    

    如果你有监听器做不同的事情(我的 jQuery 终端测试中有这个);

    本机代码:

     function shortcut({chr, ctrlKey = false, altKey = false}) {
         var lowerChr = chr.toLowerCase();
         var upperChr = chr.toUpperCase();
         var keydownCode = upperChr.charCodeAt(0);
         var e = new KeyboardEvent("keydown", {
             key: lowerChr,
             code: "Key" + upperChr,
             ctrlKey,
             altKey,
             keyCode: keydownCode,
             which: keydownCode
         });
         var keypressCode = lowerChr.charCodeAt(0);
         document.documentElement.dispatchEvent(e);
         var e = new KeyboardEvent("keypress", {
             key: lowerChr,
             ctrlKey,
             altKey,
             charCode: keypressCode,
             keyCode: keypressCode,
             which: keypressCode
         });
         document.documentElement.dispatchEvent(e);
     }
    

    【讨论】:

    • 感谢 jc ubic .. 但我想要与您的答案完全相反.. 如果我运行 record_session();那么 ctrl+alt+r 必须被触发.. 我该如何实现呢??
    • @KarthikeyaVaidya 您可以添加标志,在按键中测试它并在记录会话中设置它。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2019-12-30
    • 1970-01-01
    • 2015-04-23
    • 2011-05-23
    • 2018-05-31
    相关资源
    最近更新 更多