android上的keyCode总是229

Jea*_*eri 37 html javascript android keyevent

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

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

<div contenteditable="true"></div>
<input>
<span id="keycode"></span>
Run Code Online (Sandbox Code Playgroud)

脚本:

$('div, input').on('keydown', function (e) {
    $('#keycode').html(e.keyCode);
});
Run Code Online (Sandbox Code Playgroud)

DEMO

幸运的是,我可以找到关于此的帖子,但我找不到一个有效的解决方案.有人建议改为使用keyup或使用该textInput事件,但只会触发该事件blur.

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

任何帮助,将不胜感激!

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

Ima*_*eem 20

普通按键事件不会给Android设备中的keyCode.关于这一点已经有了很大的讨论.

如果你想捕捉space bar或按下special chars,你可以使用textInput事件.

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

注意:textInput不会在字母,数字,退格键,输入和其他几个键上触发.


Ada*_*eis 6

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

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

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

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

希望这可以帮助某人。


San*_*eep 5

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

event.target.value.charAt(event.target.selectionStart-1).charCodeAt()


小智 -12

尝试e.which代替e.keyCode

有关此属性的更多信息,请检查https://api.jquery.com/event.which/