我正在开发一个应用程序,当用户在特定文本框中按下CMD + LEFT时,我需要进行一些后处理。我需要在浏览器的默认功能after中执行此操作(即,将插入符号移至当前物理行中的第一个位置之后)。
问题是,只要按下[[CMD键,就会为LEFT键(或与此有关的任何键)触发keyup
是not。
我用CTRL和SHIFT键尝试了此操作,发现按预期的方式触发了辅助键。因此,如果您先按CTRL + LEFT,然后再释放LEFT,再再释放CTRL,则总共会发生四个事件,分别是2个按键和2个按键。但是,对于CMD密钥,我们有2次按键按下,但只有一个keyup事件(最后释放它时,这是CMD密钥本身的事件)。
SHIFT
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);
});
_e.preventDefault();
完成它>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();