我需要在我的网站上检测自定义搜索框的键码,但键码在 Chrome for Android 上始终返回为零(退格键除外,它返回 8)。有没有其他人经历过这种情况,你是如何解决的?我们的网站适用于除 Chrome for Android 之外的所有移动浏览器,因为我们无法检测到非零键码或字符码。
我在 Android 4.1.2 Jelly Bean 上运行 Chrome 27.0.1453.90。这个问题可以用简单的东西来复制:
alert(event.keyCode);
我需要在我的网站上检测自定义搜索框的键码,但键码在 Chrome for Android 上始终返回为零(退格键除外,它返回 8)。有没有其他人经历过这种情况,你是如何解决的?我们的网站适用于除 Chrome for Android 之外的所有移动浏览器,因为我们无法检测到非零键码或字符码。
我在 Android 4.1.2 Jelly Bean 上运行 Chrome 27.0.1453.90。这个问题可以用简单的东西来复制:
alert(event.keyCode);
以下解决方案也适用于我。也可能对其他人有用。
var getKeyCode = function (str) {
return str.charCodeAt(str.length - 1);
}
document.getElementById("a").onkeyup = function (e) {
var kCd = e.keyCode || e.which;
if (kCd == 0 || kCd == 229) { //for android chrome keycode fix
kCd = getKeyCode(this.value);
}
alert(kCd)
}
我遇到了这个问题,这就是我想出解决问题的方法。
这就是我发现keydown事件实际上是由一个名为“textInput”的独特事件触发的,该事件包含event.originalEvent.data中的信息。
希望这可以节省您的时间并祝您好运!
我在 SonyXperia 和 HTC 的 Android 设备上也遇到过同样的问题。我正在开发混合应用程序,我通过从文本字段中读取 事件event.keyCode()
中输入的字符来验证金额文本keydown
字段,这样我就可以只允许输入数字和点(。)字符。我试过但没用,在这些设备中总是返回 0。后来我keyup
通过正则表达式提供了其他具有事件和字符匹配的解决方案:
$("#AmountField").keyup(function (e) {
var regex = /^[0-9\.]$/;
var str = $(this).val();
var subStr = str.substr(str.length - 1);
if(!regex.test(subStr)) {
if(str.length >0){
$(this).val(str.substr(0, (str.length - 1)));
}else{
$(this).val();
}
}
});
希望这可以帮助面临这个问题的人。祝你好运。
我们最近在一款国产安卓手机魅族MX3上遇到了这个问题,它基于安卓4.4.4深度定制操作系统。
默认浏览器和 Chrome 工作得很好,但是由于一些我们不知道的奇怪原因,event.keyCode,event.charCode和event . 在其他一些浏览器(例如CM 浏览器或微信应用的 webview )中一直返回 0 )。
我们通过检查您输入的最后一个字符(例如 'A' 或 ' '(空格))来解决此问题,然后我们使用 charCodeAt 将其转换为 ascii 代码,例如"A".charCodeAt(0)返回 97,这是实际的字符我们需要的代码。
但是我们只能使用这种策略来确定可见字符的字符代码,这满足了我们目前的需要感谢上帝。
希望大家能从中得到一些启发。
获取keyCode的真正方法是使用
event.which
事件对象的这个属性是标准化的event.keyCode
属性。您也可以在此处的 jQuery 文档或此处的 MDN中阅读有关它的信息
换句话说,我对安卓设备上的键盘事件有很多经验。由于设备碎片(设备或外部键盘应用程序之间的不同 ROM),Android 浏览器有时会出现键盘事件问题。最好的方法是尝试使用所有键盘事件(keydown、keyup 和 keypress)并比较每个结果以获取按下的键。
最好的方法是在“输入”事件中使用并获取所有时间的最后一个宪章。输入事件可以像我在此处的回答中一样进行控制。
<input type="text" id="char" size="15" onblur="showKeyCode()" value="a">
<input type="button" value="Show Key Code" onclick="showKeyCode();">
<script>
function showKeyCode()
{
var character = document.getElementById ( "char" ).value.substr(this.length - 1);
var code = character.charCodeAt();
var stringall = document.getElementById ( "char" ).value;
var msg = "The Key Code for the \""+character+"\" character is "+code+".";
alert(msg);
}
</script>
将输入类型更改为 tel :<input type="tel">
这将让您记录 keyCode 但它不会记录退格键,并且它可能会强制移动设备上的键盘仅输入数字。
因此,在大多数 Android 浏览器中,如果您使用 keydown 或 keyup,您将无法从 key 或 keyCode 或 which 或 code 获取数据
你可以使用 event.data(Inserted data key) 和 event.inputType(backspace or del in mobile)
为了实现您需要的功能,您必须根据 Android 手机的用户代理应用条件
if (navigator.userAgent.match(/Android/i)) {
node.addEventListener('input', handleInput, false);
} else {
node.addEventListener('keydown', handleKeyDown, false);
}
const handleKeyDown = event => {
event.preventDefault();
if (!event.key) {
return false;
}
genericFunctionHandleThings(event.key, event.code === 'Backspace');
};
const handleInput = event => {
event.preventDefault(); // Here event.preventDefault doesn't stop user from typing
genericFunctionHandleThings(event.data, event.inputType === 'deleteContentBackward');
node.value = storedOrProcessedValue;
};
在这里我使用了 node.value = storedOrProcessedValue 因为如果我们想对用户输入进行一些限制,我们需要处理并将其重新分配给输入
您可以将其与输入类型文本、网址、电子邮件、电话一起使用,这些我已经测试过,其余我需要检查
如果有人还在挖掘它。问题出现在三星
android
设备的库存键盘上。
而是使用onkeyup
.
需要使用charCode而不是keyCode
<input type="text" onKeyPress="return funName(this,event)" />
<script language="javascript">
function funName(th,ev)
{
alert(ev.charCode);
}
</script>