我有两个函数。当按下回车键时,函数正常运行,但当按下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/