有些客户在使用iPad蓝牙键盘将文本输入我们的某个内部网站时报告了问题.在屏幕键盘上使用台式机或iPad时,主要按输入某个输入可以正常工作,但使用连接到iPad的蓝牙键盘时则不行.
经过调查,当连接到iPad上的蓝牙键盘时,onKeyUp的任何输入都会返回0作为键码.该演示工作正常,但是当使用屏幕键盘时它不起作用,因为键码返回0. I created this jsFiddle to demonstrate.它在Chrome和Safari for iPad上进行了测试,结果与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);
});
<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>
编辑:刚刚向Apple报告了这个错误.我们将看看是否有任何结果.
解决方法:
测试研究
我刚刚对此进行了一些测试,并发现在iOS Safari上使用蓝牙键盘时的keyUp事件中,唯一能够根据属性e.key,e.charCode,e.keyCode提供任何适当反馈的键.以及e.which是以下键:
>逃避
>向上箭头
>左箭头
>右箭头
>向下箭头
所有其他键返回以下内容:
{
key: "Dead",
charCode: 0,
keyCode: 0,
which: 0
}
这些特殊键(转义键和箭头键)仅根据语法UIKeyInput {PascalCasedKeyName}在e.key属性上返回不同的值:
> UIKeyInputEscape
> UIKeyInputUpArrow
> UIKeyInputLeftArrow
> UIKeyInputRightArrow
> UIKeyInputDownArrow
摘要
在iOS上,基于我的快速学习,你可以在keyUp事件上识别的唯一键是Escape和四个箭头键,通过在e.key属性上匹配它们的名称.这些值也出现在keyDown事件中.
如果您仍然需要等到keyUp事件为您的应用程序触发,并且您需要匹配除这些特殊键之外的其他键,我能想到的唯一解决方案是使用keyDown事件来捕获键,但是然后监听keyDown事件中的keyUp事件如下:
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)
此外
在快速搜索“UIKeyInput”之后,我发现UIKeyInput是“一组UIResponder用于实现简单文本输入的子类的方法”. (Apple’s Developer Documentation)这将解释这些键名的特殊语法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。