我有两个功能。当按下 Enter 时,功能运行正常,但当按下 Esc 时它不会。转义键的正确数字是多少?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
我有两个功能。当按下 Enter 时,功能运行正常,但当按下 Esc 时它不会。转义键的正确数字是多少?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
尝试使用keyup 事件:
$(document).on('keyup', function(e) {
if (e.key == "Enter") $('.save').click();
if (e.key == "Escape") $('.cancel').click();
});
与其对函数中的键码值进行硬编码,不如考虑使用命名常量来更好地传达您的含义:
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 question展示了在其他浏览器中定义该对象的好方法。
(答案摘自我之前的评论)
您需要使用keyup
而不是keypress
. 例如:
$(document).keyup(function(e) {
if (e.which == 13) $('.save').click(); // enter
if (e.which == 27) $('.cancel').click(); // esc
});
keypress
浏览器之间似乎没有一致处理(在 IE vs Chrome vs Firefox 中尝试http://api.jquery.com/keypress上的演示。有时keypress
不注册,以及 'which' 和 ' 的值keyCode' 变化)而keyup
一致。
由于对e.which
vs进行了一些讨论e.keyCode
:请注意,这e.which
是 jquery 规范化值,并且是推荐使用的值:
event.which 属性规范了 event.keyCode 和 event.charCode。建议观看 event.which 进行键盘按键输入。
要查找任何键的键码,请使用以下简单函数:
document.onkeydown = function(evt) {
console.log(evt.keyCode);
}
27
是转义键的代码。:)