我正在开发一个应用程序,当用户在特定文本框上按 CMD+LEFT 时,我需要进行一些后处理。我需要在浏览器的默认功能之后(即,在将插入符号置于当前物理行的第一个位置之后)执行此操作。
问题是只要 LEFT 键(或与此相关的任何键)不会触发 keyup
>CMD 键已按下。
我用 CTRL 和 SHIFT 键尝试了此操作,发现 keyup 按辅助键的预期触发。因此,如果您按下 CTRL+LEFT,然后松开 LEFT,然后松开 CTRL,则总共会收到 4 个事件:2 个按键按下和 2 个按键按下。然而,对于 CMD 键,我们得到 2 次 keydown,但只有 1 个 keyup 事件(当我们最终释放 CMD 键本身时)。
我用 SHIFT 键尝试了此操作,发现 keyup 按辅助键的预期触发。因此,如果您执行SHIFT+LEFT,然后释放LEFT,然后释放SHIFT,则总共会获得4个事件, 2 次按键按下和 2 次按键按下。然而,对于 CMD 键,我们得到了 2 次 keydown,但只有 1 个 keyup 事件(当我们最终释放它时 CMD 键本身)。
它可能是什么?当 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);
});
最佳答案
这是known behavior使用元 key ,不幸的是没有已知的解决方法。
对于您的情况,您可以考虑自己实现默认浏览器行为 ( how to do that ),然后实现您需要的自定义行为,最后使用 _e.preventDefault();
完成它
关于javascript - 当按住 CMD 键时,任何其他键都不会触发 keyup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380018/