当按住CMD键时,不会触发任何其他键的键输入

问题描述 投票:21回答:3

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

问题是,只要按下[[CMD键,就会为LEFT键(或与此有关的任何键)触发keyupnot

我用CTRL和SHIFT键尝试了此操作,发现按预期的方式触发了辅助键。因此,如果您先按CTRL + LEFT,然后再释放LEFT,再再释放CTRL,则总共会发生四个事件,分别是2个按键和2个按键。但是,对于CMD密钥,我们有2次按键按下,但只有一个keyup事件(最后释放它时,这是CMD密钥本身的事件)。

我用

SHIFT

键尝试了此操作,发现按辅助键的要求触发了keyup。因此,如果您执行SHIFT + LEFT然后释放LEFT然后释放SHIFT,则总共将获得4个事件,2个按键按下和2个按键按下。但是,对于CMD键,我们有2次按键按下,但是只有一个keyup事件(最后释放它时,是[键本身的一个事件)。可能是什么? CMD按下时,有什么方法可以触发

LEFT

键(或任意键)触发keyup我正在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); });

javascript jquery dom-events keyevent
3个回答
2
投票
对于您的情况,您可以考虑自己实现默认的浏览器行为(how to do that),然后实现所需的自定义行为,并以_e.preventDefault();完成它>

2
投票

0
投票
http://jsfiddle.net/7nd7hf16/1/

var cmdDown = false; $('#foo') .keydown(function(_e) { if(_e.keyCode == 91) cmdDown = true; if(cmdDown && _e.keyCode == 37) console.log('cmd + left'); console.log('Keydown: ' + _e.keyCode); }) .keyup(function(_e) { if(_e.keyCode == 91) cmdDown = false; console.log('Keyup: ' + _e.keyCode); }) .focus();

© www.soinside.com 2019 - 2024. All rights reserved.