0

这个线程几乎解决了我的问题:jQuery .keypress() 可以同时检测多个键吗?

但是,使用提供的代码。如果您按 CTRL+C 复制一些文本,然后松开,则数字将保持为“1”,直到您分别按 CTRL 和 R。

编码:

var keys_count = 0;
var keys = {};

$(document).keydown(function (e) {
    if(keys[e.which]) return;

    keys_count = keys_count + 1;
    keys[e.which] = true;

    printKeys();
});

$(document).keyup(function (e) {
    keys_count = keys_count - 1;
    delete keys[e.which];

    printKeys();
});

function printKeys() {
    $('#out').html(keys_count);
}

在这里试试我的例子:http: //jsfiddle.net/gFcuU/524/

任何想法如何避免这种情况?

我只是想跟踪,当前用户是否只是简单地输入一些字母,或者执行命令,即 CTRL + C、CTRL + A 等。但也许有一个更简单的方法,我到目前为止找到了?

4

2 回答 2

2

最简单的事情是测试event.ctrlKey

$(document).keydown(function (e) {
    if (e.ctrlKey) {
        $('#ctrl').text("true");
    } else {
        $('#ctrl').text("false");
    }
});

小提琴

您也可以将其与普通键的测试结合使用。例如:

if (e.ctrlKey && e.which == 67) {

jQuery 事件对象 API

于 2013-11-10T16:46:38.037 回答
1

事件处理程序包含一些数据 e,它告诉您是否有一些可能有用的键组合。e.shiftKey 和 e.ctrlKey 是布尔值,告诉您在按下这些键时是否按住它们。

请记住,您可能希望在允许此类操作时使用 e.preventDefault(),以便用户可以按 ctrl+a 而不是选择页面上的所有内容。

于 2013-11-10T16:52:27.330 回答