JQuery keyup()keydown()和keypress()不支持iPad和蓝牙键盘

时间:2014-01-22 23:58:02

标签: javascript jquery ios ipad bluetooth

我无法让keyup()keydown()keypress()事件在iPad上运行。当我连接无线蓝牙键盘并尝试使用键盘输入时会出现问题 - 事件不会触发。我尝试在iPad上使用Safari和Chrome(iOS 6.1)。这个相同的HTML在桌面上的Firefox,Safari,Chrome等中运行良好。有没有办法更改此代码,使其在平板电脑上工作?我检查了document.activeElement,它似乎是文档正文,这是正确的。

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script>
            $(document).ready(function() {
                $(document).keyup(function(event) {
                    document.getElementById("output").innerHTML = document.getElementById("output").innerHTML + ("keyup " + event.which) + "<br>";
                });
                $(document).keydown(function(event) {
                    document.getElementById("output").innerHTML = document.getElementById("output").innerHTML + ("keydown " + event.which) + "<br>";
                });
                $(document).keypress(function(event) {
                    document.getElementById("output").innerHTML = document.getElementById("output").innerHTML + ("keypress " + event.which) + "<br>";
                });
            });
        </script>
    </head>
    <body>
        <div id="output"></div>
    </body>
</html>

2 个答案:

答案 0 :(得分:6)

显然在iOS上,除非文字字段具有焦点,否则键盘将无法工作,期间
要解决这个问题,我需要在HTML中添加隐藏文本字段。像这样:

<div style="overflow: hidden; position: relative; width: 1px; height: 1px; left: -500px">
<input id="input" type="textfield" autocorrect="off" autocapitalize="off">
</div>

现在的问题是,JavaScript无法在iPad上自动提供隐藏的输入焦点。因此,我将不得不添加某种必须物理点击的按钮,以提供隐藏的输入字段焦点。请参阅here

<input type="button" value="Click here first" onclick="document.getElementById('input').focus();">

我讨厌这个。如果有人能找到更好的解决方案,请告诉我。

答案 1 :(得分:-1)

使用jQuery,如果你使用keydown,它可以正常工作

$("#selector").on("keydown", function(event) { console.log(event.which); }); 

使用keyCode获取在事件中返回的正确密钥对象。奇怪的是,它发送了一个keyup事件,但所有相关数据都设置为0。