我有两个函数。当按下回车键时,函数正常运行,但当按下escape键时,它就不正常了。退出键的正确数字是多少?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
我有两个函数。当按下回车键时,函数正常运行,但当按下escape键时,它就不正常了。退出键的正确数字是多少?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
当前回答
一个健壮的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;
}
});
热键支持以下修饰符:⇧、shiftoption“altctrlcontrolcommand”和⌘。
以下特殊键可用于快捷键:backspacetab,clear,enter,return,esc,escape,space,up,down,left,right,home,end,pageup,pagedown,del,delete和f1到f19。
其他回答
27是escape键的代码。:)
与其硬编码函数中的keycode值,不如考虑使用命名常量来更好地传达你的意思:
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对象,为您公开这些类型的常量。这个SO问题也展示了在其他浏览器中定义该对象的好方法。
解释其他答案没有解释的地方;问题是你用的按键。
也许事件只是命名错误,但按键被定义为当插入一个实际字符时触发。即文本。 而你想要的是keydown/keyup,它在用户按下keyey之前或之后触发。也就是键盘上的那些东西。
区别出现在这里,因为esc是一个控制字符(字面上是“非打印字符”),因此不写入任何文本,因此甚至不触发按键。 enter是奇怪的,因为即使你使用它作为一个控制字符(即控制UI),它仍然插入一个换行字符,这将触发按键。
来源:quirksmode
只是发布一个更新的答案比e.c ekeycode被认为是DEPRECATED在MDN上。
相反,你应该选择e.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);
试试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;
}