可靠的方式来获得keyEvent的价值#34;所有"浏览器包括Mobile

时间:2016-02-23 08:40:42

标签: javascript jquery google-chrome mobile-browser

我试图在keyPresskeydownkeyUp事件中获取keyPressed的值。 这里的不同解决方案适用于Chrome,FireFox,IE等。但是它们在Android设备上失败。

我尝试了几个灵感来自以下SO的解决方案:

第一个解决方案:

element.keydown(function (e) { 
    var keyCode = e.charCode || e.keyCode || e.which;
    var digit = String.fromCharCode(keyCode);

    // here digit is "å" on android using danish locale
}

KeyUp产生相同的结果。 KeyPressed不会在Android上的chrome上触发。

为了重现我做了一个plunkr,它显示了行为:

https://plnkr.co/BVUfiJrBr0RBPDst9izD/

它在桌面上工作正常,但是在Android浏览器上,keyCode总是229,无论按下哪个键。

我转载了错误:

  • 三星Galaxy S6,Android 5.1.1,浏览器:Chrome 48.0.2564.95
  • Sony Experia Z2,Android 5.1.1,浏览器:Chrome 48.0.2564.95

它确实起作用了:

  • 三星Galaxy S6,Android 5.1.1,浏览器:Firefox
  • iPhone

尝试重现错误表示Chrome中存在错误。这个问题有不同的方法吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用input事件?面对类似的问题一次,这帮助我回到了Android 4.4(使用FF,Chrome和Android的原生浏览器)。

做了一个小例子fiddle。希望这有帮助!

答案 1 :(得分:0)

我必须自己解决这个问题。在我的例子中,元素是文本输入元素。在keyup事件(在所有浏览器中触发),我模糊了输入。现在输入的内容在input.val()中可用,并且触发change事件。所以我在输入上的change事件上添加了一个函数,它收集输入的内容并将焦点返回到输入。就我而言,我只需要一个角色。我还没有对某人快速打字并且浏览器必须在快速击键之间执行所有这些操作的情况进行测试。

我的代码如下所示:

$('input').on( 'keyup', function(){
    $(this).blur();
});
$('input').on( 'change', function(){
    // my code to do what I want with the value that was entered,
    // which thanks to the blur() I can get from input.val()
    $(this).focus(); // return focus to the input so the user can continue
});

也许这会有所帮助?