iPad蓝牙键盘使用onKeyUp返回的任何键的键码均为0

Wil*_*eed 5 html javascript bluetooth ipad ios

一些客户使用他们的iPad蓝牙键盘向我们的内部站点之一输入文本时,一直在报告问题。使用台式机或屏幕键盘上的iPad时,主要在某些输入上按Enter键可以很好地工作,但使用连接至iPad的蓝牙键盘时则不能。

经调查,onKeyUp当连接到iPad上的蓝牙键盘时,似乎输入的任何回车键代码都返回0。该演示工作正常,但是当使用屏幕键盘时,由于键码返回0而无法正常工作。我创建了这个jsFiddle进行演示。在iPad的Chrome和Safari上都进行了测试,结果与正常工作相同,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);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="inputKeyUp">keyup</textarea>
<div id="outputKeyUp">Key Up Key:</div>
<b/>
<textarea id="inputKeyPress">keypress</textarea>
<div id="outputKeyPress">Key Press Key:</div>
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ren 5

测试研究

我做了这方面的一些测试刚才,发现在keyUp事件中使用iOS上的Safari浏览器,,让在性能方面任何形式的适当的反馈的唯一密钥的蓝牙键盘时e.keye.charCodee.keyCodee.which是下面的键:

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

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

{
    key: "Dead",
    charCode: 0,
    keyCode: 0,
    which: 0
}
Run Code Online (Sandbox Code Playgroud)

这些特殊键(转义键和箭头键)仅e.key根据语法在属性上返回不同的值UIKeyInput{PascalCasedKeyName}

  • UIKeyInputEscape
  • UIKeyInputUpArrow
  • UIKeyInputLeftArrow
  • UIKeyInputRightArrow
  • UIKeyInputDownArrow

摘要

在iOS上keyUp,根据我的快速研究,您可以在事件上识别的唯一键是Escape和,这四个键Arrow keys是通过在e.key属性上匹配它们的名称来实现的。这些值也会出现在keyDown事件上。

如果您仍然需要等到keyUp事件触发您的应用程序,并且需要匹配除这些特殊键以外的其他键,那么我能想到的唯一解决方案是使用keyDown事件捕获键,然后监听keyUp事件keyDown事件内部是这样的:

el.addEventListener("keydown", e => {
    if (e.which === 13) // Enter key, or which ever key code you'd like
        el.addEventListener("keyup", function keyUp(e) {
            el.removeEventListener("keyup", keyUp, false) // Memory clean-up

            // Your code here
        }, false)
}, false)
Run Code Online (Sandbox Code Playgroud)

此外

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