Command + V无法使用jQuery中的keyup事件

时间:2013-05-23 14:24:46

标签: jquery macos keyup

我有以下场景,并且下面是一个小的jQuery脚本:

我有 input 并附加了 keyup 事件

$('input').on('keyup', function(e) {
    console.info(e.ctrlKey, e.metaKey, e.keyCode);
});

我们所有人都知道它的作用,它应该打印到控制台,在事件(ctrl值)下按下boolean键,或者是Meta键(在我的情况下,{在事件期间(另一个Command值)和密钥代码(boolean值)按下了{1}}键。

没什么不寻常的,但是......

按下int键时,按下它时,command事件会被禁止用于任何其他键。

如果按keyup ctrl,而不是命令),则会抛出ctrl + v - 这很棒,true false 86被按下ctrl密钥已释放且keyCode为86(对于v)并且在抛出v之后 - 这也很好,该事件在释放false false 17密钥后被触发。

Weel,当按ctrl时,它只会抛出 command + v ,这意味着该事件只触发一次(当false false 91键被释放时),而不是两次。它应该抛出command(没有ctrl键,但是带有false true 86的元键),然后抛出v(释放false false 91时)。

这是一个jQuery错误,Mac OS X限制还是我做错了什么?

如何让它发挥作用?

谢谢!

PS:我需要command事件,因为我需要粘贴输入的文本来对其进行一些处理。我还需要keyup,因为我需要粘贴的值:)

PS2:在Windows操作系统上,我认为它的工作正常。

1 个答案:

答案 0 :(得分:2)

您可以使用paste事件。

$('input').on('paste', function(e) {
    setTimeout(function(){
        console.log($('input').val());
    }, 0);
});

FIDDLE

setTimeout函数是必需的,以便在调用它之前确保更新输入的值。您可以通过多种方式将this传递给setTimeout

选项1 (添加到窗口对象或声明全局变量)

$('input').on('paste', function(e) {
    window.input = $(this);
    setTimeout(function(){
        console.log(input.val());
    }, 0);
});

FIDDLE

选项2 (将变量传递给另一个函数)

$('input').on('paste', function(e) {
    var input = $(this);
    setTimeout(function(){
        inputVal(input);
    }, 0);
});

function inputVal(input){
    console.log(input.val());
}

FIDDLE