不在OSX上处理html按键事件的特殊字符

时间:2013-01-27 02:05:35

标签: javascript jquery html macos html5

以下页面无法按预期工作。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <script src="js/jquery.js"></script>
    </head>
    <body>
        <script>
            $('body').keypress(function(e){
                console.log('char: ',String.fromCharCode(e.keyCode));
            });
        </script>
    </body>
</html>

尝试输入á é í ó ú等特殊字符会改为打印a e i o u

1 个答案:

答案 0 :(得分:1)

请注意,keypress的jQuery文档说:“注意:,因为keypress事件未被任何官方规范涵盖,使用它时遇到的实际行为可能不同浏览器,浏览器版本和平台。“它还说:”要确定输入了哪个字符,请检查传递给处理函数的event对象。虽然浏览器使用不同的属性来存储此信息,但jQuery会规范化.which属性,以便您可以可靠地使用它来检索字符代码。“

至少在Windows上,使用e.which在浏览器中提供一致的结果,而e.keyCode则不然。并且它产生输入的字符,例如á当我按下急钥(')然后按A键。如果在OSX中没有发生这种情况,那么解释可能是处理密钥时的系统级差异;您可能需要检查是否可以更成功地使用keydownkeyup(它们应该指示按下的键,并且您需要在程序逻辑中从它们中推断出字符)。