Javascript 如何从Android移动设备键盘获取按键码?

Javascript 如何从Android移动设备键盘获取按键码?,javascript,android,jquery,mobile,keyevent,Javascript,Android,Jquery,Mobile,Keyevent,目前,我在移动设备上面临一个问题。我有一个只允许按下某些键的输入字段:例如,只允许数字0–9。它在网络浏览器上工作得非常好。但当我在Android移动设备上打开它时,它失败了 我使用了keyup和keypresskeyup正在工作,但我想知道是哪个键从移动键盘触发了事件。我是如何得到它的?我正在使用一个数组,该数组映射到所有键盘键,并在给定索引处使用keycode,然后在元素的keydown上检查其是否允许键,因为在移动设备中,某些键盘键将具有与数字键的keycode相同的代码,因此它将允许该键

目前,我在移动设备上面临一个问题。我有一个只允许按下某些键的输入字段:例如,只允许数字0–9。它在网络浏览器上工作得非常好。但当我在Android移动设备上打开它时,它失败了


我使用了
keyup
keypress
keyup
正在工作,但我想知道是哪个键从移动键盘触发了事件。我是如何得到它的?

我正在使用一个数组,该数组映射到所有键盘键,并在给定索引处使用keycode,然后在元素的keydown上检查其是否允许键,因为在移动设备中,某些键盘键将具有与数字键的keycode相同的代码,因此它将允许该键

所以我用以下方法来防止这种情况

//keyboard maping array   
var keyboardMap = ["", "", "", "CANCEL", "", "", "HELP", "", "BACK_SPACE", "TAB", "", "", "CLEAR", "ENTER", "RETURN", "", "SHIFT", "CONTROL", "ALT", "PAUSE", "CAPS_LOCK", "KANA", "EISU", "JUNJA", "FINAL", "HANJA", "", "ESCAPE", "CONVERT", "NONCONVERT", "ACCEPT", "MODECHANGE", "SPACE", "PAGE_UP", "PAGE_DOWN", "END", "HOME", "LEFT", "UP", "RIGHT", "DOWN", "SELECT", "PRINT", "EXECUTE", "PRINTSCREEN", "INSERT", "DELETE", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "COLON", "SEMICOLON", "LESS_THAN", "EQUALS", "GREATER_THAN", "QUESTION_MARK", "AT", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "WIN", "", "CONTEXT_MENU", "", "SLEEP", "NUMPAD0", "NUMPAD1", "NUMPAD2", "NUMPAD3", "NUMPAD4", "NUMPAD5", "NUMPAD6", "NUMPAD7", "NUMPAD8", "NUMPAD9", "MULTIPLY", "ADD", "SEPARATOR", "SUBTRACT", "DECIMAL", "DIVIDE", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "", "", "", "", "", "", "", "", "NUM_LOCK", "SCROLL_LOCK", "WIN_OEM_FJ_JISHO", "WIN_OEM_FJ_MASSHOU", "WIN_OEM_FJ_TOUROKU", "WIN_OEM_FJ_LOYA", "WIN_OEM_FJ_ROYA", "", "", "", "", "", "", "", "", "", "CIRCUMFLEX", "EXCLAMATION", "DOUBLE_QUOTE", "HASH", "DOLLAR", "PERCENT", "AMPERSAND", "UNDERSCORE", "OPEN_PAREN", "CLOSE_PAREN", "ASTERISK", "PLUS", "PIPE", "HYPHEN_MINUS", "OPEN_CURLY_BRACKET", "CLOSE_CURLY_BRACKET", "TILDE", "", "", "", "", "VOLUME_MUTE", "VOLUME_DOWN", "VOLUME_UP", "", "", "", "", "COMMA", "", "PERIOD", "SLASH", "BACK_QUOTE", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "OPEN_BRACKET", "BACK_SLASH", "CLOSE_BRACKET", "QUOTE", "", "META", "ALTGR", "", "WIN_ICO_HELP", "WIN_ICO_00", "", "WIN_ICO_CLEAR", "", "", "WIN_OEM_RESET", "WIN_OEM_JUMP", "WIN_OEM_PA1", "WIN_OEM_PA2", "WIN_OEM_PA3", "WIN_OEM_WSCTRL", "WIN_OEM_CUSEL", "WIN_OEM_ATTN", "WIN_OEM_FINISH", "WIN_OEM_COPY", "WIN_OEM_AUTO", "WIN_OEM_ENLW", "WIN_OEM_BACKTAB", "ATTN", "CRSEL", "EXSEL", "EREOF", "PLAY", "ZOOM", "", "PA1", "WIN_OEM_CLEAR", ""];
//Allowed keys as per your requirement          
var allowedKey = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "NUMPAD0", "NUMPAD1", "NUMPAD2", "NUMPAD3", "NUMPAD4", "NUMPAD5", "NUMPAD6", "NUMPAD7", "NUMPAD8", "NUMPAD9", "DELETE", "BACK_SPACE", "DECIMAL", "LEFT", "RIGHT", "TAB", "SUBTRACT", "PERIOD"];

//bind keydown to your element
element.on("keydown", function (e) {
        var key = e.charCode || e.keyCode || 0;
        var keyValue = keyboardMap[key];
        if ($.inArray(keyValue, allowedKey) !== -1){
              return true;
        }
        else{
              return  false;
        }
}

它对我有用,希望对你也有用。

你可以使用event.keyCode或event.key获取密钥信息。试试这个:document.onkeyup=function(e){console.log(e);}问题的可能重复是,mobile中的某些键码将具有与数字相同的键码,因此它也允许使用这些键。我遇到了同样的问题,我找到了我给出的答案here@Jugnu当我已经尝试过这种类型的代码时。当您编写keyCode或charCode时,它只会给出2290的结果。那么你怎么知道当前按的是哪个键。@Kushal是的,所有浏览器都在keypress上给出了键码,但在android移动chrome浏览器上没有。它只在台式机上提供。嗨,你能看一下吗:我在手机上检测钥匙码有困难。谢谢在一些安卓系统上,
keyCode
&
,它总是
229