【问题标题】:How to do something if the user presses two keys in javascript如果用户在javascript中按下两个键怎么办
【发布时间】:2012-11-08 18:17:38
【问题描述】:

所以我写了这个脚本,这样你就可以在你的网站上使用键盘快捷键,我想知道如何做多个键(即,而不是只做“左箭头”键,它会是“ctrl + 左箭头"。这是我当前的语法:

var arrow = {
    left: 37,
    up: 38,
    right: 39,
    down: 40
};

function DoSomething() {}

$(document).ready(function() { // requires jQuery
    $("body").keydown(function(event) {
        if(event.keyCode == arrow.left) {
            DoSomething();
        }
    }
}

但我想做的是这样的:

var arrow = {
    left: 37,
    up: 38,
    right: 39,
    down: 40
},

ctrl = 17;

function DoSomething() {}

$(document).ready(function() { // requires jQuery
    $("body").keydown(function(event) {
        if(event.keyCode == ctrl && arrow.left) {
            DoSomething();
        }
    }
}

【问题讨论】:

    标签: javascript jquery keyboard shortcut


    【解决方案1】:

    jQuery 中提供的事件对象告诉您是否正在按下 ctrl 键。

    $(document).on("keydown", function (event) {
        if (event.ctrlKey && event.which === arrow.left) {
            console.log("You pressed left, and control.");
        }
    });
    

    演示:http://jsfiddle.net/zcMXR/

    【讨论】:

    • 所以你的意思是,我可以做到if((event.ctrlKey) && arrow.left) { } ?
    • @ModernDesigner 正确。不过,您不需要将 event.ctrlKey 括在括号中。
    • @ModernDesigner 很高兴。继续摇摆;)
    • @JonathanSampson 你不是说&& event.keyCode == arrow.left吗?否则,它只是测试 arrow.left 的有效性,它作为一个非零数,将始终评估为 true。
    • @JacobAbrahams 啊,你是对的。大脑有片刻不在那里工作。尽管有一个微小的变化,event.whichevent.keycode 更受欢迎,因为它标准化了各种浏览器值。
    【解决方案2】:

    jQuery 已经做到了。除了跟踪按下了哪个键之外,您还可以通过以下属性获取有关该键是否与altctrlshift 组合按下的信息:

    $(document).keydown(function(e) {
          console.log('key code is: ' + e.which + ' ' + (e.ctrlKey ? 'Ctrl' : '') + ' ' +
                (e.shiftKey ? 'Shift' : '') + ' ' + (e.altKey ? 'Alt' : ''));
    });
    

    因此,要检查组合键是否为 Ctrl + Up,您的条件将如下所示:

    if( e.which == 38 && e.ctrlKey ){
        console.log('You pressed Ctrl+Up');
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2021-12-12
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      相关资源
      最近更新 更多