哪个键码用于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.which
与e.keyCode
有一些讨论:请注意, e.keyCode
。它是jquery标准化的值,并且是推荐使用的值:
event.which属性规范了event.keyCode和event.charCode。 build议观看键盘input的事件。
要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(); });
概要
-
which
比keyCode
更可取,因为它是标准化的 -
keyup
比keydown
更可取,因为如果用户保持按下,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 inserted
时when an actual
keypress
被定义为触发。 即文本。
而你想要的是keydown
/ keyup
,每当the user depresses a
key
(分别在之前或之后)触发。 就是那些键盘上的东西。
不同的地方出现在这里,因为esc
是一个控制字符 (字面意思是“非打印字符”),所以不写任何文本,因此甚至不会触发keypress
。
enter
是很奇怪的,因为即使你使用它作为控制字符(即控制UI),它仍然插入一个换行符,这将触发keypress
。
来源: quirksmode
我一直使用keyup和e.which抓住逃生的钥匙。
我知道这个问题是关于jquery的问题,但对于那些使用jqueryui的人来说,有许多关键代码的常量:
$.ui.keyCode.ESCAPE
用于捕获键盘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 控制 命令和⌘ 。
以下特殊键可用于快捷方式: 退格键 , 清除 , 回车 , 退出 , 退出 , 空格 , 上 , 下 , 左 , 右 , 家庭 , 结束 , pageup , pagedown , del , 删除和f1到f19 。
只要发布一个比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);