在javascript中检测多个按键

时间:2013-10-21 18:36:52

标签: javascript jquery html

我正试图在javascript中检测一些键组合。我需要检测 Ctrl + Ctrl + ,以及

到目前为止,我只是想检测何时按 Ctrl 。这就是我所拥有的(JSFiddle link):

var keys = {};

$(document).keydown(function (e) {
    keys[e.which] = true;

    printKeys();
});

$(document).keyup(function (e) {
    delete keys[e.which];

    printKeys();
});

function printKeys() {
    var html = '';
    for (var i in keys) {
        html += '<p>i: ' + i + '</p>'
        if (!keys.hasOwnProperty(i)) continue;
        if ($.inArray(17, keys) > -1) 
            html += '<p>ctrl was pressed, return val: ' + $.inArray(17, keys) + '</p>'
    }
    $('#out').html(html);
}

我想我真的不明白JQuery的inArray应该如何工作,因为当我按任何键时,它只返回-1。 if语句也计算为true,而我只希望它在按下 Ctrl 时执行此操作。我如何解决这个问题,以便我的if语句正确检测 Ctrl 被按下?一旦我正常工作,我就能够完成其余的工作。

编辑:更改了if-statement以评估inArray返回> -1

5 个答案:

答案 0 :(得分:2)

在javascript中,您需要捕获window.event.ctrlKey的值以检测是否按下了控制键。下面是一个函数示例,用于使用ctrl+v键盘快捷键阻止从剪贴板粘贴到字段中:

    function BlockControlV() {
        var keyPressed = window.event.keyCode;
        var ctrlPressed = window.event.ctrlKey;
        if (ctrlPressed && keyPressed == 86) {

            var ClipBoardData = window.clipboardData.getData('Text')
            ClipBoardData = trim(ClipBoardData)

            if (ClipBoardData != '') {
                if (isNaN(ClipBoardData) == true) {
                    window.event.keyCode = 0;
                }
            }
            else {
                window.event.keyCode = 0;
            }
        }
    } 

虽然与你想要做的事情并不完全相关,但你应该能够找出你应该朝哪个方向前进。

答案 1 :(得分:1)

确定是否按下 ctrl 的最简单方法是测试event属性的ctrlKey对象:

$(document).keypress(function(e){
    console.log(e.which, e.ctrlKey);
});

JS Fiddle demo

我本来会提供一个更相关的演示,但我不知道该演示的目的是什么。

答案 2 :(得分:1)

首先,键不是数组 - 它是一个对象。因此,您可以简单地编写:

,而不是函数中的2个单独的if块
if (keys.hasOwnProperty(i)) {
  ...
}

其次,jQuery为事件对象添加了一个非常方便的属性:ctrlKey

在你的keydown事件处理程序中,在if语句中包含对printKeys的调用:

if (e.ctrlKey) {
  printKeys();
}

最后,要检测ctrl +(任何其他键),只需检查事件上的which属性是否与您要查找的keyCodes之一相对应

答案 3 :(得分:0)

首先,你在其他情况下缺少大括号{}

<强> js Fiddle DEMO

if (i == 17) {
    html += '<p>ctrl</p>';
} else {}

运行Demo&amp;当您单击Ctrl键时,会显示文本“ctrl”。

e.ctrlKey是检测Ctrl键单击的最简单方法。

要检测Ctrl +左 Demo here

$(document).keydown(function(e){
    if(e.keyCode == 37 && e.ctrlKey)
        alert("Control + Left Clicked"); 
});

答案 4 :(得分:0)

您可以使用返回的event对象轻松检测到它。此对象还包含有关所有control keys

的信息
  • ctrlKey - 是否按了Control键?
  • shiftKey - 是否按了Shift键?
  • altKey - 是否按下了Alt键?

所有这些属性都是boolean值(true,如果按下了按钮,否则为false)。

以下是JSFiddle中上述属性的演示。

相关问题