哪个键码用于jQuery的转义键

我有两个function。 当按下inputfunction时,function运行正常,但是当按下转义按键时不会。 退出键的正确数字是什么?

$(document).keypress(function(e) { if (e.which == 13) $('.save').click(); // enter (works as expected) if (e.which == 27) $('.cancel').click(); // esc (does not work) }); 

尝试使用关键事件 :

 $(document).keyup(function(e) { if (e.keyCode === 13) $('.save').click(); // enter if (e.keyCode === 27) $('.cancel').click(); // esc }); 

而不是硬编码你的函数中的键代码值,考虑使用命名常量来更好地传达你的意思:

 var KEYCODE_ENTER = 13; var KEYCODE_ESC = 27; $(document).keyup(function(e) { if (e.keyCode == KEYCODE_ENTER) $('.save').click(); if (e.keyCode == KEYCODE_ESC) $('.cancel').click(); }); 

有些浏览器(如FireFox,不确定其他浏览器)定义了一个全局的KeyEvent对象,为您公开这些types的常量。 这个SO问题显示了在其他浏览器中定义该对象的好方法。

(解答从我以前的评论中提取)

你需要使用keyup而不是keypress 。 例如:

 $(document).keyup(function(e) { if (e.which == 13) $('.save').click(); // enter if (e.which == 27) $('.cancel').click(); // esc }); 

keypress似乎没有在浏览器之间一致处理(尝试在http://api.jquery.com/keypress演示在IE浏览器与Chrome浏览器与Firefox。有时;keypress不注册,并且'哪个'和“keyCode”不同),而keyup是一致的。

由于e.whiche.keyCode有一些讨论:请注意, e.keyCode 。它是jquery标准化的值,并且是推荐使用的值:

event.which属性规范了event.keyCode和event.charCode。 build议观看键盘input的事件。

(来自http://api.jquery.com/event.which/

要find任何键的键码,使用这个简单的function:

 document.onkeydown = function(evt) { console.log(evt.keyCode); } 

27是转义键的代码。 🙂

试试jEscape插件( 从谷歌驱动器下载 )

 $(document).escape(function() { alert('ESC button pressed'); }); 

或者获取跨浏览器的键码

 var code = (e.keyCode ? e.keyCode : e.which); if (code === 27) alert('ESC'); if (code === 13) alert('ENTER'); 

也许你可以使用开关

 var code = (e.keyCode ? e.keyCode : e.which); switch (code) { case 27: alert('ESC'); break; case 13: alert('ENTER'); break; } 

你最好的select是

 $(document).keyup(function(e) { if (e.which === 13) $('.save').click(); // enter if (e.which === 27) $('.cancel').click(); // esc /* OPTIONAL: Only if you want other elements to ignore event */ e.preventDefault(); e.stopPropagation(); }); 

概要

  • whichkeyCode更可取,因为它是标准化的
  • keyupkeydown更可取,因为如果用户保持按下,keydown可能会出现多次。
  • 除非你想捕捉实际的字符,否则不要使用keypress

有趣的是,Bootstrap在其下拉组件中使用了keydown和keyCode(从3.0.2开始)! 我认为这可能是糟糕的select。

相关的JQuery文档片段

虽然浏览器使用不同的属性来存储这些信息,但jQuery会规范化.which属性,以便您可以可靠地使用它来检索关键代码。 此代码对应于键盘上的一个键,包括特殊键(如箭头)的代码。 捕捉实际的文本input,.keypress()可能是一个更好的select。

其他感兴趣的项目: JavaScript Keypress Library

要获取所有字符的hex代码: http : //asciitable.com/

你的代码工作得很好。 这很可能是没有集中的窗口。 我使用类似的functionclosuresiframe框等

 $(document).ready(function(){ // Set focus setTimeout('window.focus()',1000); }); $(document).keypress(function(e) { // Enable esc if (e.keyCode == 27) { parent.document.getElementById('iframediv').style.display='none'; parent.document.getElementById('iframe').src='/views/view.empty.black.html'; } }); 

我正在试图做同样的事情,它是从我身上窃取垃圾。 在Firefox中,看起来如果你尝试做一些事情时,按下退出键,它继续处理退出键,然后取消你试图做的任何事情。 警报工作正常。 但就我而言,我想回到没有奏效的历史。 最后发现,我不得不强制传播的事件停止如下所示…

 if (keyCode == 27) { history.back(); if (window.event) { // IE works fine anyways so this isn't really needed e.cancelBubble = true; e.returnValue = false; } else if (e.stopPropagation) { // In firefox, this is what keeps the escape key from canceling the history.back() e.stopPropagation(); e.preventDefault(); } return (false); } 

解释其他答案还没有; 问题是你使用keypress

也许这个事件只是错误的命名,但是when an actual character is being insertedwhen an actual keypress被定义为触发。 即文本。
而你想要的是keydown / keyup ,每当the user depresses a key (分别在之前或之后)触发。 就是那些键盘上的东西。

不同的地方出现在这里,因为esc是一个控制字符 (字面意思是“非打印字符”),所以不写任何文本,因此甚至不会触发keypress
enter是很奇怪的,因为即使你使用它作为控制字符(即控制UI),它仍然插入一个换行符,这将触发keypress

来源: quirksmode

我一直使用keyup和e.which抓住逃生的钥匙。

我知道这个问题是关于jquery的问题,但对于那些使用jqueryui的人来说,有许多关键代码的常量:

 $.ui.keyCode.ESCAPE 

http://api.jqueryui.com/jQuery.ui.keyCode/

用于捕获键盘input和组合键的健壮的Javascript库。 它没有依赖关系。

http://jaywcjlove.github.io/hotkeys/

 hotkeys('enter,esc', function(event,handler){ switch(handler.key){ case "enter":$('.save').click();break; case "esc":$('.cancel').click();break; } }); 

hotkeys理解以下修饰符: shift 选项 ⌥alt ctrl 控制 命令

以下特殊键可用于快捷方式: 退格键清除回车退出退出空格家庭结束pageuppagedowndel删除f1f19

只要发布一个比e.keyCode更新的答案, e.keyCode被认为是MDN上的DEPRECATED 。

相反,你应该selecte.key而不是支持干净名称的一切。 这是相关的复制意大利面

 window.addEventListener("keydown", function (event) { if (event.defaultPrevented) { return; // Do nothing if the event was already processed } switch (event.key) { case "ArrowDown": // Do something for "down arrow" key press. break; case "ArrowUp": // Do something for "up arrow" key press. break; case "ArrowLeft": // Do something for "left arrow" key press. break; case "ArrowRight": // Do something for "right arrow" key press. break; case "Enter": // Do something for "enter" or "return" key press. break; case "Escape": // Do something for "esc" key press. break; default: return; // Quit when this doesn't handle the key event. } // Cancel the default action to avoid it being handled twice event.preventDefault(); }, true);