按住CMD键时,不会触发任何其他键的键盘

tec*_*bar 21 javascript jquery keyevent dom-events

我正在开发一个应用程序,当用户在特定文本框上按CMD + LEFT时,我需要进行一些后处理.我需要在浏览器的默认功能之后执行此操作(即,在将插入符号放在当前物理行中的第一个位置之后).

问题keyup没有被触发左边的键(或与此有关的任何键),只要CMD键被按下.

我用CTRL和SHIFT键尝试了这个,发现keyup按预期触发了辅助键.因此,如果您执行CTRL + LEFT然后释放LEFT然后释放CTRL,则总共有4个事件,2个keydowns和2个keyup.但是对于CMD密钥,我们得到2个keydowns,但只有一个keyup事件(当我们最后发布它时,CMD密钥本身就是一个).

我用SHIFT键尝试了这个,发现keyup按照预期的次序触发.所以,如果你SHIFT +左键,然后松开左键,然后松开SHIFT,你在总共4个事件,2个keydowns和2个keyups.但是对于CMD密钥,我们得到2个keydowns,但只有一个keyup事件(当我们最后发布它时,CMD密钥本身就是一个).

会是什么呢?keyup当CMD关闭时,有没有办法可以触发LEFT键(或任何键)?

我正在尝试使用OSX 10.9.5上的最新Google Chrome.Firefox上的行为也完全相同.所以这不是Chrome问题.

演示:http://jsfiddle.net/techfoobar/xu0o11nh/4/

实质上:

$('#mytextbox')

    // this gets correctly triggered for the meta key as well as the secondary key
    // when you press CMD and LEFT in sequence, you get two lines in the console one for 
    // the CMD key and one for the LEFT key
    .keydown(function(_e) {
        console.log('Keydown: ' + _e.keyCode);
    })

    // however, if I release the LEFT key (while keeping the CMD key down)
    // this does NOT get triggered for the LEFT key
    .keyup(function(_e) {
        console.log('Keyup: ' + _e.keyCode);
    });
Run Code Online (Sandbox Code Playgroud)

cas*_*ebb 6

这是元键的已知行为,遗憾的是没有已知的解决方法。

对于您的情况,您可以考虑自己实现默认浏览器行为(如何执行),然后实现您需要的自定义行为,并完成它_e.preventDefault();