Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript捕获android虚拟键盘上键入的键_Javascript_Android_Jquery_Samsung Mobile - Fatal编程技术网

使用javascript捕获android虚拟键盘上键入的键

使用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时,它会失败。由于某种原因,当我在

我有一个带有文本区域的网页,我需要捕获用户键入的键(这样我就可以用不同的unicode字符替换键入的键)。我目前的代码如下:

$("#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;x{ //调试器; 让 cur_text=x.value, 职位= 查找输入的子字符串和删除的子字符串( text,cur_text,Math.max( x、 选择开始,x.选择结束 ) ) 控制台日志(位置) 让 进入= cur_text.substring( 位置,左,位置,右 ), 除去= text.substring( positions.removed\u left,positions.removed\u right ) 如果( 已输入。长度> 0 || 已删除。长度> 0 ) { document.getElementById(“已输入”) .innerHTML+= 进入 document.getElementById(“已删除”) .innerHTML+= 远离的 document.getElementById(“事件”) .innerHTML= 事件计数++ } text=当前文本
const 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;
});