对于任何带有onKeyUp的按键,iPad蓝牙键盘都会返回0的键码

时间:2017-08-28 17:47:45

标签: javascript html ios ipad bluetooth

有些客户在使用iPad蓝牙键盘将文字输入我们的某个内部网站时,一直在报告问题。在屏幕键盘上使用台式机或iPad时,主要按输入某个输入可以正常工作,但使用连接到iPad的蓝牙键盘时则不行。

经过调查,当连接到iPad上的蓝牙键盘时,onKeyUp的任何输入都会返回0作为键码。该演示工作正常,但是当使用屏幕键盘时,由于键码返回0,它无法正常工作。I created this jsFiddle to demonstrate.它在Chrome和Safari for iPad上都经过测试,效果与{{{ 1}}但仅使用onKeyPress返回0。



onKeyUp

$('#inputKeyUp').keyup(function (event){
	$("#outputKeyUp").text("Key Up Key: " + event.which);
});

$('#inputKeyPress').keypress(function (event){
	$("#outputKeyPress").text("Key Press Key: " + event.which);
});




编辑:刚刚向Apple报告了这个错误。我们将看看是否有任何结果。

2 个答案:

答案 0 :(得分:4)

测试研究

我刚刚对此进行了一些测试,并发现在iOS上使用蓝牙键盘的keyUp事件中,唯一能够根据属性提供任何适当反馈的键{{1} },e.keye.charCodee.keyCode是以下键:

  • 逃逸
  • 向上箭头
  • 左箭头
  • 右箭头
  • 向下箭头

所有其他键返回以下内容:

e.which

这些特殊键(转义键和箭头键)仅根据语法{ key: "Dead", charCode: 0, keyCode: 0, which: 0 } e.key属性上返回不同的值:

  • UIKeyInput{PascalCasedKeyName}
  • UIKeyInputEscape
  • UIKeyInputUpArrow
  • UIKeyInputLeftArrow
  • UIKeyInputRightArrow

摘要

在iOS上,基于我的快速学习,您可以在UIKeyInputDownArrow事件中识别的唯一键是keyUp和四个Escape,通过匹配Arrow keyse.key的名称1}}属性。这些值也会显示在keyDown事件中。

如果您仍需要等到keyUp事件触发您的应用程序,并且您需要匹配除这些特殊密钥之外的其他密钥,我可以提出的唯一解决方案是使用{{1}用于捕获密钥的事件,但是然后在keyDown事件中监听内的事件

keyUp

此外

快速搜索“UIKeyInput”后,我发现keyDown是“UIResponder用于实现简单文本输入的子类的一组方法”。 (Apple's Developer Documentation)这将解释这些关键名称的特殊语法。

答案 1 :(得分:1)

这是keyup事件中Enter键的解决方法。

if (event.type === 'keyup') {
    //this is to handle the enter button on an ipad bluetooth keyboard
    if (event.key === 'Enter') {
        event.which = event.keyCode = 13;
    }
}