Javascript键控不是';当命令和另一个命令被按下时调用
这是Mac唯一的问题;我在windows上试用过,效果很好。 我有一个脚本,可以保存在Javascript键控不是';当命令和另一个命令被按下时调用,javascript,jquery,Javascript,Jquery,这是Mac唯一的问题;我在windows上试用过,效果很好。 我有一个脚本,可以保存在keydown上按下的键,并在keydup上删除它们 $(function(){ var keys = []; $(document).keydown(function(event) { keys[event.which] = true; }); $(document).keyup(function(event) { delete keys[e
keydown
上按下的键,并在keydup
上删除它们
$(function(){
var keys = [];
$(document).keydown(function(event) {
keys[event.which] = true;
});
$(document).keyup(function(event) {
delete keys[event.which];
console.log(keys);
});
});
我现在所做的就是在控制台上记录keyup之后剩下的任何东西,这应该什么都没有。当您同时按任意数量的键时,此功能将按预期工作
但是,当您按命令
和任何其他键时,另一个键不会释放!因此console.log
将显示该键为true
。这将保持true
,直到您按下该键为止
这只发生在Mac电脑上,而且只发生在按下其中一个键是命令键时。下面是一个非常简单的例子
有什么想法吗?每当你按下
命令时,Mac都会修改你的按键,因此正常的按键事件永远不会触发
C
=命令键和K
=非命令键
按C
和K
时,它们会正常注册。同时按下两个按钮时,Mac会捕获并修改K
。在修改K
时,Mac会以某种方式使K
的keyup
事件不会按预期触发<然而,code>C
的keyup
按预期工作
由于K
的keyup
从未实际触发,因此它无法从keys
中正确删除匹配的元素。稍后,当您在不使用C
的情况下按K
时,keydown
事件将覆盖键中现有的keydown
。当K
的keyup
正确启动时,它会按预期工作
除了用于输入ASCII字符的所有普通键,
键盘通常有许多特殊用途的键,它们可以执行其他操作
东西。这些不一定会产生与正常情况相同的事件
键,并且它们在浏览器之间显示的一致性较差
。这篇文章对所有与关键相关的问题都有潜在的帮助。我无法解决这个Mac问题,但以下是我的解决方法
如果您尝试使用键盘快捷键行为,即用户按CMD+S进行保存或类似操作,此答案将对您有所帮助。这个答案不适用于那些可能正在制作游戏或其他东西的人,他们的键盘的按键状态需要在每个跑步帧都知道。对不起
在keydown返回的KeyboardEvent中,您可以执行以下操作
$(document).keydown(function(keyboardEvent) {
if (keyboardEvent.metaKey){
// on Mac, CMD is down ...or Meta key is down on pc
console.log(keyboardEvent.meta + " & command key are down")
switch (keyboardEvent.which) {
...
}
}
});
如果您的键盘快捷键与浏览器的重叠,则需要确保取消键盘事件的传播
keyboardEvent.preventDefault()
我希望这能帮助那些希望键盘快捷键功能与Mac兼容的人 那很有趣。所以我照你说的做了。在keyup
上,从不调用K
。更有趣的是,如果用K
按下C
,则实际上不会调用keypress
事件。我知道keypress
事件即使没有特殊的键也很挑剔,所以这并不奇怪。是否有一个keyup
在没有匹配的kedown
的情况下发生?可能是mac完全从修改后的K
中删除了keyup
事件,而不是试图模拟其他键。是的,keyup
在C
和K
中都会发生,但我只为C
获得了一个匹配的keyup
事件。那么我的理论基本上是正确的。Mac没有为不同的密钥创建一个不匹配的keyup
事件,而是对其进行了大量修改,以至于浏览器根本无法拾取keyup
。我会相应地更新我的答案。诅咒你的苹果!shakes fistBtw,而不是使用可以使用var-keys={}的数组然后是console.log(JSON.stringify(keys))代码>:)@Jack,这有什么好处?我想使用数组。为什么?我无法想象为什么元素的顺序会产生不同,而稀疏数组似乎是错误的数据类型。实际上,我使用的应用程序的顺序是至关重要的!这就是我需要数组的原因。排序不会告诉您哪个键先到,那么您如何使用包含键代码的排序?不是说你错了,我只是好奇。