javascript - 当按住 CMD 键时,任何其他键都不会触发 keyup

标签 javascript jquery dom-events keyevent

我正在开发一个应用程序,当用户在特定文本框上按 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/

相关文章:

javascript - 如何使用 gtag 跟踪 Google Analytics 中的 utm_source?

javascript 不会运行

javascript - 如何更新对象内字符串中的 html 元素?

javascript - 当我添加更多问题(JS)时,测验消失了,怎么办?

javascript - iframe 和父级之间的事件通知

javascript - Socket.IO - 如何向房间里的每个人发出事件,包括发件人?

javascript - 按属性对三个不同的对象数组进行排序

javascript - 网页。背景是如何构建的。

javascript - JS函数在onclick事件中不可见

javascript - onmouseover 和 onmouseout 事件在页面加载时触发,而不是在事件上触发