我需要在我的网站上检测自定义搜索框的密钥代码,但Chrome for Android上的密钥代码始终返回为零(退格区除外,返回8)。有没有其他人经历过这一点,你是如何解决它的?我们的网站适用于除Chrome for Android以外的所有移动浏览器,因为我们无法检测到非零键码或字码。
我在Android 4.1.2 Jelly Bean上运行Chrome 27.0.1453.90。这个问题可以通过以下简单的方法复制:
alert(event.keyCode);
答案 0 :(得分:14)
below solution 也适合我。也可能对其他人有用。
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)
}
答案 1 :(得分:2)
我们最近在中国制造的Android手机魅族MX3上遇到了这个问题,该手机具有基于 Android 4.4.4 的深度定制操作系统。
默认的浏览器和Chrome工作正常,但由于一些我们不知道的奇怪原因, event.keyCode , event.charCode 和事件。哪个在其他一些浏览器中一直返回0(例如CM Browser或微信应用的webview)。
我们通过检查您输入的最后一个字符(例如'A'或''(空格))解决了这个问题,然后我们使用charCodeAt将其转换为ascii代码,例如“A”.charCodeAt(0)返回97,这是我们需要的实际字符代码。
但是我们只能使用这个策略来确定可见字符的字符代码,这符合我们当前需要感谢上帝。
希望你们能从中获得灵感。
答案 2 :(得分:2)
我遇到了与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();
}
}
});
希望这对面临这个问题的人有所帮助。祝你好运。
答案 3 :(得分:2)
我遇到了这个问题,这就是我如何解决问题的方法。
这就是我发现keydown事件实际上被一个名为" textInput"的唯一事件触发的方式。其中包含event.originalEvent.data中的信息。
希望这能节省您的时间和好运!
答案 4 :(得分:1)
获取keyCode的真正方法是使用
event.which
事件对象上的此属性标准化event.keyCode
属性。您也可以在jQuery文档here或MDN here
另外,我在Android设备上有很多键盘事件的经验。 由于设备碎片(设备或外部键盘应用程序之间的ROM不同),Android浏览器有时会出现键盘事件。最好的方法是尝试使用所有键盘事件(keydown,keyup和keypress)并比较每个结果以获得按下的键。
最好的方法是在“输入”事件中使用并始终获得最后一个章程。输入事件可以像我的回答here一样控制。
答案 5 :(得分:1)
<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>
答案 6 :(得分:1)
如果有人还在挖它。问题出现在股票三星键盘上
android
个设备。
而是使用onkeyup
。
答案 7 :(得分:0)
需要使用 charCode 而不是 keyCode
<input type="text" onKeyPress="return funName(this,event)" />
<script language="javascript">
function funName(th,ev)
{
alert(ev.charCode);
}
</script>
答案 8 :(得分:0)
将输入的类型更改为tel:<input type="tel">
这将允许您记录keyCode,但它不会记录退格键,并且可能会强制移动设备上的键盘只有数字。
答案 9 :(得分:0)
因此,在大多数Android浏览器中,如果您使用keydown或keyup,您将无法从key或keyCode或代码中获取数据
您可以使用event.data(插入的数据键)和event.inputType(退格键或移动设备中的del键)
要实现此功能,您需要基于android mobile的用户代理应用条件
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,因为如果我们想对用户键入进行一些限制,我们需要处理并将其重新分配给输入
您可以将其与输入类型的文本,URL,电子邮件,电话一起使用,这些我已经测试过,我需要检查其余部分