Javascript 无法识别移动键盘中的冒号键

Javascript 无法识别移动键盘中的冒号键,javascript,dom-events,keyboard-events,Javascript,Dom Events,Keyboard Events,我有一个按键事件处理程序,我很难确定用户是否在手机键盘(如iPhone)上按了冒号 问题是浏览器返回相同的event.keyCode值(或event.which,取决于浏览器)用于冒号和分号。由于在触发keydown事件处理程序时,该值尚未添加到HTMLInputElement的值属性,我无法使用简单的“获取最后一个字符并检查其冒号”逻辑 使用186的字符串.fromCharCode()(这是iPhone上冒号按钮的事件.which值)不会给我一个分号,而是一个奇怪的圆圈字符。但是印刷 Stri

我有一个按键事件处理程序,我很难确定用户是否在手机键盘(如iPhone)上按了冒号

问题是浏览器返回相同的
event.keyCode
值(或
event.which
,取决于浏览器)用于冒号和分号。由于在触发
keydown
事件处理程序时,该值尚未添加到
HTMLInputElement的
属性,我无法使用简单的“获取最后一个字符并检查其冒号”逻辑

使用186的
字符串.fromCharCode()
(这是iPhone上冒号按钮的
事件.which
值)不会给我一个分号,而是一个奇怪的圆圈字符。但是印刷
String.fromCharCode(59)
确实给了我一个冒号

以下是我的代码的简单版本:

isColon : function(event)
                {
                    // first check for desktop browsers 
                    if (event.shiftKey && event.which == constants.KEYS.COLON) //the constant is 186 or 59 depending on browser, this works on all desktop browsers
                        return true;
                    //this doesnt work as event.which=186 which is NOT giving a ":"  when I say String.fromCharCode(event.which)
                    if (String.fromCharCode(event.which) == ":")
                        return true;
                    return false;
                }

使用按键代替;您仍然可以使用event.preventDefault()来防止字符出现在输入中。

keypress不是标准设置。来自jQuery网站:“keypress事件不在任何官方规范中,使用它时遇到的实际行为可能因浏览器、浏览器版本和平台而异。”虽然不是标准,但有很多支持,特别是在我测试过的移动浏览器中。ppk在上有一个简短的兼容性表