有些客户在使用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报告了这个错误。我们将看看是否有任何结果。
答案 0 :(得分:4)
我刚刚对此进行了一些测试,并发现在iOS上使用蓝牙键盘的keyUp
事件中,唯一能够根据属性提供任何适当反馈的键{{1} },e.key
,e.charCode
和e.keyCode
是以下键:
所有其他键返回以下内容:
e.which
这些特殊键(转义键和箭头键)仅根据语法{
key: "Dead",
charCode: 0,
keyCode: 0,
which: 0
}
在e.key
属性上返回不同的值:
UIKeyInput{PascalCasedKeyName}
UIKeyInputEscape
UIKeyInputUpArrow
UIKeyInputLeftArrow
UIKeyInputRightArrow
在iOS上,基于我的快速学习,您可以在UIKeyInputDownArrow
事件中识别的唯一键是keyUp
和四个Escape
,通过匹配Arrow keys
上e.key
的名称1}}属性。这些值也会显示在keyDown
事件中。
如果您仍需要等到keyUp
事件触发您的应用程序,并且您需要匹配除这些特殊密钥之外的其他密钥,我可以提出的唯一解决方案是使用{{1}用于捕获密钥的事件,但是然后在keyDown
事件中监听1}}事件内的事件
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;
}
}