当keyup函数运行时保持iOS键盘打开

9
这个问题涉及iOS网页开发。
我有一个函数,它由“搜索”输入框中的keyup监听器触发。在台式机、笔记本电脑、三星Galaxy手机和索尼Xperia上运行得很完美,但在iPhone或iPad上却不行。每当函数运行时,软键盘就会关闭。我想到一个可能的解决方法是,在函数的最后一行重新 focus 输入 id='newsearch',但好像没有任何作用。
有人知道如何在iOS中保持键盘打开而函数正在运行吗?
请参见下面的3个代码片段: 触发函数的代码行:
<tr><td colspan='3'>Search <input type='text' autofocus id='newsearch'></input></td>

    <h2>Search Results</h2>
    <div id="newsearch-data"> </div>

<script src="http://code.jquery.com/jquery-1.8.0.min.js"> </script>
<script src="addplayer.js"> </script>

The function itself: addplayer.js

$('input#newsearch').on('keyup', function(){
    var newsearch = $('input#newsearch').val();
    if ($.trim(newsearch)!= "") {
        $.post('newsearch.php', {newsearch: newsearch}, function(data) {
            $('div#newsearch-data').html(data);
        });
    }
});
            document.getElementById("newsearch").focus();

该函数所涉及的php文件:newsearch.php

if (isset($_POST['newsearch']) && $_POST['newsearch'] != NULL){
    require 'dbconnect.php';

    $term = $_POST['newsearch'];
    $terms = "%" . $term . "%";

    $_SESSION['players'] = array();

    $query = ("SELECT * FROM players WHERE Username LIKE '$terms' OR Phonenumber LIKE '$terms' OR PlayerID LIKE '$terms'");
    $run_query = mysqli_query($dbcon, $query);

        echo "<table border='1px'><tr><th>Player ID</th><th>Name</th><th>Action</th></tr>";

            while ($dbsearch = mysqli_fetch_assoc($run_query))
             {
                $dbu = $dbsearch['Username'];
                $id = $dbsearch['PlayerID'];
                $func = "add(" . $id . ", Brad Henry )";
             array_push ($_SESSION['players'],$dbsearch['PlayerID']);
             echo "<tr><td>".$id ."</td><td>".$dbu."</td><td><input type=\"submit\" id=\"PlayerAdded".$id."\" autofocus value=\"Add\" onclick=\"add('".$id."','".$dbu."');\"></input></td></tr>";
             }

你正在运行哪个版本的iOS?当我在iOS 8中打开此页面时,它能正常工作。http://codepen.io/hampusohlsson/pen/mejMpw - hampusohlsson
@hamohl 我使用的是iOS 9,但已在各种iOS设备上进行了测试。它可以运行搜索,但键盘在第一次松开按键后约半秒钟就会关闭,因此当搜索一个包含15个或更多字符的名称时,键盘会关闭5-7次,用户每次都必须取消选择搜索输入。您使用哪种设备? - Tunna182
我正在使用iPhone 5S iOS8。您可以尝试使用超时来防止在您完成输入之前发送多个请求,至少看看它是否有帮助。请查看上面更新的笔 :) - hampusohlsson
2个回答

0

尝试将焦点设置在字段上。

$('input#newsearch').on('keyup', function(){
    var field = $(this);
    var newsearch = field.val();
    if ($.trim(newsearch)!= "") {
        $.post('newsearch.php', {newsearch: newsearch}, function(data) {
            $('div#newsearch-data').html(data);
            field.focus();
        });
    }
});

我非常感谢你的建议,但是实际测试后,老实说并没有什么区别。 - Tunna182

0

我简直不敢相信我花了这么长时间才意识到。在newsearch.php中最后一个'echo'包含添加按钮上的autofocus属性... 我把它移除了,现在它可以正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接