android 上的 keyCode 始终为 229

IT技术 javascript android html keyevent
2021-02-08 00:30:54

在我的三星 Galaxy tab 4(Android 4.4.2,Chrome:49.0.2623.105)上,我遇到了 keyCode 始终为 229 的情况。

我已经为两种情况设置了一个简单的测试

<div contenteditable="true"></div>
<input>
<span id="keycode"></span>

脚本:

$('div, input').on('keydown', function (e) {
    $('#keycode').html(e.keyCode);
});

演示

幸运的是,我可以找到有关此问题的帖子,但找不到可以解决问题的帖子。有人建议keyup改用或使用该textInput事件,但事件仅在blur.

现在,最重要的是,默认的股票浏览器不会发生这种情况:(

任何帮助,将不胜感激!

更新:如果事实证明这是不可能的,我仍然可以在插入符号之前获取字符:post

6个回答

普通按键事件不会在 android 设备中提供 keyCode。对此已经有很大的讨论

如果你想捕捉space bar的新闻special chars,你可以使用textInput事件。

$('input').on('textInput', e => {
     var keyCode = e.originalEvent.data.charCodeAt(0);
     // keyCode is ASCII of character entered.
})

注意:textInput不会在字母、数字、退格、回车和其他几个键上触发。

我遇到了同样的问题,找不到任何解决方案。

event.target.value.charAt(event.target.selectionStart - 1).charCodeAt()
如果光标位于最后一个字符之前的任何位置并且正在插入字符,我认为这不会起作用。
2021-03-17 00:30:54
请问你是怎么修的?你能把代码贴出来吗?谢谢你。
2021-03-21 00:30:54
嘿谢谢你指出来。我已经修复了它,它应该根据光标位置给出字符代码
2021-03-29 00:30:54
event.target.selectionStart 这条线获得插入符号位置
2021-04-11 00:30:54

遇到同样的问题,只发生在 Android 上的库存三星键盘上。解决方法是关闭键盘预测,从而修复输入。仍在进一步分析以查看是否可以在 JS 领域找到解决方法。

编辑:我已经设法为我们的案例找到了解决方案。发生的事情是,我们有一个允许用户在我们的输入框中输入的允许字符的白名单。这些是字母数字字符加上一些列入白名单的控制字符(例如 enter、esc、up/down)。任何其他字符输入都会阻止事件默认值。

发生的事情是所有带有 229 键代码的事件都被阻止了,因此没有输入文本。一旦我们将密钥代码 229 也添加到白名单中,一切都会恢复正常。

因此,如果您使用某种自定义或 3rd 方表单输入控件组件,请确保检查键码 229 是否已列入白名单/允许,而不是默认阻止。

希望这可以帮助某人。

我会对一个有效的解决方案感兴趣,但我放弃了,我现在专注于一个解决方案,在该解决方案中我使用插入符号位置并比较按键之前和之后的字符串。请注意,此解决方案不适用于 SHIFT、CTRL 等键
2021-04-06 00:30:54

我在三星 S7 手机上遇到了同样的问题。从KEYDOWN更换事件解决它按键

$("div, input").keypress(function (e) {
    $("#keycode").html(e.which); 
});

jQuery 规范了这些东西,所以没有必要使用除 e.which https://stackoverflow.com/a/302161/259881以外的任何东西

也返回 229。
2021-03-21 00:30:54
试过这个,这个事件从来没有为我触发过(松下硬垫)。
2021-03-27 00:30:54
document.onkeypress 和 window.onkeypress 永远不会在我的安卓平板电脑上触发
2021-04-03 00:30:54


我知道我在回答一个旧帖子,但这个问题仍然存在,所以我想分享一个观点。
然而,这种方法不是一个精确的解决方案,而只是像我一样紧急的解决方案。
关键是在使用按键时使用文本框的值。对于每个按键值都会改变,通过最后一次值更新,我们可以确定按下了哪个键。
注意:这仅适用于键盘上的可见字体,即字母数字和特殊字符,如您所知,这不会记录任何控制或 shift 或 alt 键

  $('input').keyup(function () {
  var keyChar = $(this).val().substr(-1);

 //you can do anything if you are looking to do something with the visible font characters
  });
如果用户将插入符号放置在字符串末尾以外的位置怎么办?您需要使用输入插入符号位置,而不仅仅是子字符串 -1
2021-03-27 00:30:54