使用javascript捕获android虚拟键盘上键入的键
我有一个带有文本区域的网页,我需要捕获用户键入的键(这样我就可以用不同的unicode字符替换键入的键)。我目前的代码如下:使用javascript捕获android虚拟键盘上键入的键,javascript,android,jquery,samsung-mobile,Javascript,Android,Jquery,Samsung Mobile,我有一个带有文本区域的网页,我需要捕获用户键入的键(这样我就可以用不同的unicode字符替换键入的键)。我目前的代码如下: $("#myTextArea").bind('keypress', function(event) { var keyInput = event.which; // call other functions }); 上述代码适用于PC和iPhone/Safari。然而,在android(三星)平板电脑上使用Chrome时,它会失败。由于某种原因,当我在
$("#myTextArea").bind('keypress', function(event) {
var keyInput = event.which;
// call other functions
});
上述代码适用于PC和iPhone/Safari。然而,在android(三星)平板电脑上使用Chrome时,它会失败。由于某种原因,当我在安卓虚拟(软)键盘上键入时,不会触发“按键”事件。android版本是5.0.2
如果我尝试使用“keyUp”或“keyDown”,它总是为所有字符返回229(除了返回键、空格、退格等)
即使keyCode始终为229,textarea也会显示用户键入的正确字符。这意味着设备知道输入了哪个密钥,但不知何故,我无法使用javascript获得此事件(以及密钥代码)的句柄
以下是我迄今为止尝试过的备选方案及其结果:
$("#mainTextArea").on("keydown keyup", function(event) {
// event.which and event.keyCode both return 229
$(document).on('keypress', function(event) {
// function is not triggered
$('#myTextArea').bind('input keypress', function(event) {
// comes inside function, but keyCode and which are undefined
非常感谢您在这个问题上提供的任何帮助。不幸的是,您在这里似乎无能为力。 Keypress事件已弃用,因此不会触发。 229 on keyup和keydown表示键盘缓冲区正忙。原因-当你按下一个键-输入仍然不能保证是用户按下的,因为自动建议和其他事件可能会立即发生并使事件无效。 虽然在我看来,最好先发送密钥,然后触发另一个事件(可能是自动建议),这样您就可以单独执行了 我目前所知道的唯一一件事是同时附加到-keydown和keyup,在keydown上存储值,在keyup上获取值并找到delta,这是用户按下的。不幸的是,这不适用于非输入控件(例如身体或类似的东西)。
也许不是你想听到的答案,但我还是遇到了同样的问题。有几种解释,但无论如何,似乎奇怪的是,没有提供解决方案。 目前,我通过捕捉事件解决了这个问题 此事件类似于onchange事件。区别在于oninput事件在元素值更改后立即发生,而onchange事件则在元素失去焦点、内容更改后发生 此事件还支持从粘贴文本或更正和建议中插入文本 它并没有给我一个完美的解决方案,因为我只能在输入文本后对其进行操作,但目前这是我所拥有的最好的解决方案
如果有人有更好的解决方案,我会很高兴听到的。只需检查您的输入字符keyCode,如果是0或229,那么下面是函数getKeyCode(),它使用JS的charCodeAt返回keyCode,它将输入字符串作为参数并返回最后一个字符的keyCode
<script>
var getKeyCode = function (str) {
return str.charCodeAt(str.length);
}
$('#myTextfield').on('keyup',function(e){
//for android chrome keycode fix
if (navigator.userAgent.match(/Android/i)) {
var inputValue = this.value;
var charKeyCode = e.keyCode || e.which;
if (charKeyCode == 0 || charKeyCode == 229) {
charKeyCode = getKeyCode(inputValue);
alert(charKeyCode+' key Pressed');
}else{
alert(charKeyCode+' key Pressed');
}
}
});
</script>
var getKeyCode=函数(str){
返回str.charCodeAt(str.length);
}
$('#myTextfield')。在('keyup',函数(e)上{
//对于android chrome密钥码修复程序
if(navigator.userAgent.match(/Android/i)){
var inputValue=此.value;
var charKeyCode=e.keyCode | | e.which;
如果(charKeyCode==0 | | charKeyCode==229){
charKeyCode=getKeyCode(inputValue);
警报(charKeyCode+‘按键按下’);
}否则{
警报(charKeyCode+‘按键按下’);
}
}
});
我想出来了
这是一个100%有效的解决方案,适用于所有功能,甚至包括iOS上的表情符号建议和任何粘贴内容。我使用子字符串比较来查找从onInput到onInput的实际内容
指出文本从何处删除以及从何处插入的点
评分和选择作为一个答案是赞赏的
var x=document.getElementById(“区域”),
text=x.value,
事件计数=0
函数find_输入_并删除_子字符串(
上一个字符串、当前字符串、位置
) {
让
右_pos=pos,
移除的右\u边界\u=
前一个字符串长度-
(
当前字符串长度-
销售时点情报系统
),
左最大位置=数学最小值(
销售时点情报系统,
移除的右\u边界\u
),
左位置=左最大位置
为了(
设x=0;xconst inputField = document.getElementById('wanted-input-field');
inputField.addEventListener('textInput', function(e) {
// e.data will be the 1:1 input you done
const char = e.data; // In our example = "a"
// If you want the keyCode..
const keyCode = char.charCodeAt(0); // a = 97
// Stop processing if "a" is pressed
if (keyCode === 97) {
e.preventDefault();
return false;
}
return true;
});