使用JavaScript处理健壮的键盘快捷键

使用JavaScript处理健壮的键盘快捷键,javascript,prototypejs,Javascript,Prototypejs,使用JavaScript为Web应用程序创建全局键盘快捷方式处理程序的最健壮的方法是什么,即我应该处理哪些事件以及事件处理程序应该附加到哪些事件 我想要一个类似Gmail的系统,它既可以处理单键快捷方式,也可以处理带有修改键的快捷方式,如Ctrl+B等。该代码必须在IE6以及现代浏览器中工作 我有原型框架可供使用,但没有jQuery,所以请不要给出jQuery特定的答案 我要做的是将onKeyUp事件附加到document.body。然后,在这个事件处理程序中,我将使用该方法触发一个自定义事件。

使用JavaScript为Web应用程序创建全局键盘快捷方式处理程序的最健壮的方法是什么,即我应该处理哪些事件以及事件处理程序应该附加到哪些事件

我想要一个类似Gmail的系统,它既可以处理单键快捷方式,也可以处理带有修改键的快捷方式,如Ctrl+B等。该代码必须在IE6以及现代浏览器中工作


我有原型框架可供使用,但没有jQuery,所以请不要给出jQuery特定的答案

我要做的是将onKeyUp事件附加到document.body。然后,在这个事件处理程序中,我将使用该方法触发一个自定义事件。尽管此步骤是可选的,但它将有助于将事件处理程序与要执行的操作解耦,并且您可以从按钮单击事件中使用相同的自定义事件处理程序

$(document.body).observe("keyup", function() {
    if(/* key + modifier match */) {
        $(document.body).fire("myapp:mycoolevent");
    }
});

$(document.body).observe("myapp:mycoolevent", function() {
    // Handle event.
});
稍后,要将同一事件绑定到按钮,请单击:

$(button).observe("click", function() {
    $(document.body).fire("myapp:mycoolevent");
});

关于处理修改键,请查看(非常旧,但看起来仍然适用)以获得更多帮助。

LivePipe控件包中提供的热键库与Prototype一起工作,并且与IE兼容


JimmyP将此作为一条评论发布,但出于投票目的,这应该是一个答案


还有一个新的JavaScript库,名为,它易于使用,不依赖jQuery。

我只是想在混合中加入另一个。我最近发布了一个叫做捕鼠器的库。在

查看,我会查看的-谢谢。你为什么不发布答案?我会接受你的答案,因为这看起来正是我要找的,因为那个网站上还有很多其他有趣的东西,所以谢谢!请注意,如果按下未指定的修饰符,热键显然会接受组合(例如,按下指定的ctrl+a,按下ctrl+shift+a,检测到ctrl+a)。如果它检测到OS X并用cmd/meta.Keyup替换ctrl,也会很好。Keyup似乎有问题。至少在OSX上(但我相信在Windows和大多数Linux WMs上也是如此),大多数按键命令都是在按下键时激活的。这种期望(通过适当的检查)也强制了对快捷方式的某些期望:修改键必须是第一个,每个快捷方式只有一个可打印的键。我知道,这就是为什么我问他为什么不把它作为答案发布。向上投票。我知道,这就是为什么我把它作为一个答案贴出来的原因。;)我把它贴在社区维基上,因为这不是我的积分。