按键动作

我正在设计一个基于网络的会计软件。 我想在用户按下N键时打开“新会计凭证”。 每当他/她按下S键时打开“设置”。

我看到了一些基于JavaScript和jQuery的脚本。 但他们并没有完全奏效。 有人可以帮我吗?

我试过这个脚本:

var code = (e.keyCode ? e.keyCode : e.which); if(code == 13) { //Enter keycode //Do something } 

 $(document).bind('keyup', function(e){ if(e.which==78) { // "n" } if(e.which==83) { // "s" } }); 

要防止输入被聚焦:

 $("body").on("focus",":input", function(){ $(document).unbind('keyup'); }); $("body").on("blur",":input", function(){ $(document).bind('keyup', function(e){ etc.... }); 

您可能希望将bind函数放入其自己的函数中,这样您就不会重复代码。 例如:

 function bindKeyup(){ $(document).bind('keyup', function(e){ if(e.which==78) { // "n" } if(e.which==83) { // "s" } }); } $("body").on("focus",":input", function(){ $(document).unbind('keyup'); }); $("body").on("blur",":input", function(){ bindKeyup(); }); 

您可以使用.keypress()或.keyup()方法在jQuery中检测按键,这是一个简单的示例:

 $(document).keyup(function(event) { // the event variable contains the key pressed if(event.which == 78) { // N keycode //Do something } }); 

以下是密钥代码列表: http : //www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

更新1

.keyup和.keydown有不同的影响 – 根据@ThomasClayson的评论 – :keyup是最好的,因为如果按键被按下,keypress将重复。 它为每个插入的字符注册一个事件。 它也没有注册修改键,如shift(虽然在这里没有必要,但可能需要记住)

更新2

这是来自jQuery keyup doc站点:

要确定按下了哪个键,请检查传递给处理函数的事件对象。 虽然浏览器使用不同的属性来存储此信息,但jQuery会规范化.which属性,以便您可以可靠地使用它来检索密钥代码。 此代码对应于键盘上的键,包括特殊键(如箭头)的代码。

有效地意味着你需要确定哪个密钥已被使用。 谢谢@nnnnnn

您需要阅读事件对象的.keyCode()属性。 您可以询问它以发现按下了哪个键并相应地采取行动。 我还建议您在快捷键中添加修饰键,例如ShiftAlt ,这样当有人无意中输入输入时,面板就不会弹出。 在下面的例子中,我使用了Shift

 $(document).keyup(function(e) { if (e.shiftKey) { switch(e.keyCode ? e.keyCode : e.which) { case 78: // N pressed myNPressedHandler(); break; case 83: // S pressed mySPressedHandler(); break; } } } 
 $(document).bind('keypress', function(e) { var keycode= (e.keyCode ? e.keyCode : e.which); if(keyCode==78) { // "n" }else if(keyCode==83) { // "s" } });