我有两个函数。当按下回车键时,函数正常运行,但当按下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)
});
当前回答
我一直用keyup和e.来捕捉escape键。
其他回答
我也在试着做同样的事情,这让我很烦。在firefox中,如果你在按下escape键时尝试做一些事情,它会继续处理escape键,然后取消你试图做的任何事情。Alert工作正常。但在我的情况下,我想回到历史,这是行不通的。最后我发现我必须强制事件的传播停止,如下所示…
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);
}
我一直用keyup和e.来捕捉escape键。
我知道这个问题是在问jquery,但是对于那些使用jqueryui的人来说,许多键码都有常量:
$.ui.keyCode.ESCAPE
http://api.jqueryui.com/jQuery.ui.keyCode/
(答案摘自我之前的评论)
你需要使用keyup而不是keypress。例如:
$(document).keyup(function(e) {
if (e.which == 13) $('.save').click(); // enter
if (e.which == 27) $('.cancel').click(); // esc
});
键盘按键在不同浏览器之间的处理似乎不一致(请在http://api.jquery.com/keypress上尝试IE vs Chrome vs Firefox的演示。有时按键不注册,'which'和'keyCode'的值都不同),而keyup是一致的。
由于有一些关于e.which和e.keyCode的讨论:请注意,e.which是jquery规范化的值,是推荐使用的值:
该事件。哪个属性规范化事件。keyCode和event.charCode。建议观看赛事。其中用于键盘按键输入。
(来自http://api.jquery.com/event.which/)
要获得所有字符的十六进制代码:http://asciitable.com/