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)
幸运的是,我可以找到关于此的帖子,但我找不到一个有效的解决方案.有人建议改为使用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不会在字母,数字,退格键,输入和其他几个键上触发.
遇到同样的问题,只发生在 Android 上的库存三星键盘上。解决方法是关闭键盘预测,从而修复输入。仍在进一步分析以查看是否可以在 JS 领域找到解决方法。
编辑:我设法为我们的案例找到了解决方案。发生的事情是,我们有一个允许用户在我们的输入框中输入的允许字符的白名单。这些是字母数字字符加上一些列入白名单的控制字符(例如 enter、esc、up/down)。任何其他字符输入都会阻止事件默认值。
发生的事情是所有具有键代码 229 的事件都被阻止,因此没有输入文本。一旦我们将密钥代码 229 也添加到白名单中,一切都会恢复正常。
因此,如果您使用某种自定义或 3rd 方表单输入控件组件,请确保检查键码 229 是否已列入白名单/允许且未默认阻止。
希望这可以帮助某人。
我遇到了同样的问题,找不到任何解决方案。我用JavaScript解决了。
event.target.value.charAt(event.target.selectionStart-1).charCodeAt()