Android 使用jQuery Mobile和Phonegap在Galaxy S2上使用键盘输入错误

Android 使用jQuery Mobile和Phonegap在Galaxy S2上使用键盘输入错误,android,jquery-mobile,cordova,galaxy,Android,Jquery Mobile,Cordova,Galaxy,我们正在jQuery mobile 1.0.1和Phonegap 1.4.1中开发一个移动web应用程序,并且在galaxy s2上遇到了键盘问题 我们有一个滑出的菜单,其中包含搜索输入: <input type="search" placeholder="Search..." name="search" id="menu_search" data-role="none" /> 这一切在运行2.2的HTC Desire和运行CM7(Android 2.3.7)的Desire上都可以

我们正在jQuery mobile 1.0.1和Phonegap 1.4.1中开发一个移动web应用程序,并且在galaxy s2上遇到了键盘问题

我们有一个滑出的菜单,其中包含搜索输入:

<input type="search" placeholder="Search..." name="search" id="menu_search" data-role="none" />
这一切在运行2.2的HTC Desire和运行CM7(Android 2.3.7)的Desire上都可以正常工作

我们甚至尝试将输入更改为textarea,但效果基本相同:(

我还尝试:

$("#menu_search").live('focus',function(event){
   event.preventDefault();
});
看看这是否会阻止它更换键盘,但也没有运气

然而,我们在应用程序的其他地方有另一个搜索输入,效果很好,唯一的区别是另一个搜索在一个“propper”页面中:
data role=“page”
,菜单在所有其他页面之外,在它自己的页面中,只是最初设置为隐藏


请帮帮我,我在呼救!

您是否尝试将数据本机菜单=“false”属性添加到搜索输入标记中。

您可能已经尝试过了

-webkit-user-select: none;
在CSS中的某个地方。如果启用输入文本选择

input, textarea { -webkit-user-select: text; }

它又起作用了!

如果您仍然无法解决此问题,请尝试更新到phonegap 2.0。它解决了一些输入问题。

我将使用phonegap+jequery创建一个应用程序。您可以在playStore“AssignmentReminder”中查找该应用程序,或者在搜索字段koshWTF中键入该应用程序。
$('#pageid').live('pageshow', function(event, ui) {
    $(this).delegate('input[data-type="search"]', 'keyup', function () {
      if($(this).val().length != 0)
        keyword = $(this).val();

    });
 });

无论如何。我以前鼓励过这个问题,但没有解决它,因为我想它的4.0.1问题不是phone gap或jquery mobile,因为我仍然可以在4.0.4或更低版本下键入。希望你能找到答案,因为我上次搜索了很多次,但没有找到它。

我的Note II使用Phonega运行4.1.1时也遇到了同样的问题p2.6.0(尽管我也可以在2.5.0中复制)、jQuery Mobile 1.2.0和jQuery 1.7.2。我的键盘是SwiftKey 4.0.1.128

除了一个输入导致我的问题外,我的表单还有多个输入,最终会给我带来麻烦。这真是一个令人头痛的问题,因为很难复制-输入一开始总是有效的,但是如果你在输入之间随机切换并且切换时间足够长,它最终会在随机时间停止工作

这个错误过去发生得相当快,因此考虑到我必须重新启动应用程序才能使表单再次工作,这将是一个非常重要的问题,最终会再次停止工作。我的新表单结构似乎工作得很好;错误发生在输入长字符串和随机切换INPUT,我假设没有用户会这样做;但错误仍然存在,这让我感到不安

我试图在jQuery移动论坛上获得有关此错误的帮助,但他们对我的元素ID使用情况给出了一些尖刻的评论,因为显然99%(甚至可能不现实)JQM的许多错误都是由于错误的ID使用造成的。事实上,我知道我的ID在每个页面上都是唯一的,但他们坚持这是一个ID错误,甚至没有尝试正确诊断问题,但我离题了

我还应该注意到,我在网上的许多其他类似问题中发现了另一个答案中提供的CSS解决方案,但不是这个问题;虽然我理解它的用法,但CSS并没有为我解决这个问题

我的表单动态加载到数据角色=“页面”DIV中的数据角色=“内容”DIV中,因此:

当然,你的表单会有点不同,你甚至可能没有表单,因为你只有一个搜索输入(马上开始)。但是如果你有表单,那对我来说是最好的

由于您在Phonegap中,理论上您甚至可能不需要操作,因为您可能需要jQuery来处理输入,但是jQuery Mobile文档状态表单必须具有操作和方法属性,因此我不想违背这一点。此外,jQuery Mobile通常有一个data role=“field contain”DIV围绕每个标签/输入组,但我发现如果我这样做,错误会更快发生。同样,错误发生在不同的任意时刻,因此我不知道它是否与DIV直接相关

我还将一个输入硬编码到另一个页面:

<div data-role="fieldcontain" class="ui-hide-label">
    <label for="service-search-input">
    </label>
    <input name="service-search-input" id="service-search-input" placeholder="Enter a service to search for" type="search">
</div>

这似乎很好。但是,没有其他输入可以切换到,因此我可以尝试复制错误的最好方法是通过点击页面上的其他位置来聚焦/取消聚焦输入。尽管如此,我始终能够在开始时键入,但如果我理解正确,您的错误根本不允许您键入。您可能希望尝试该HTML结构并看看它是否有效。输入周围没有表单标签


我们的问题有点不同(我的大多数问题都是关于动态注入表单的,而您的问题是根据我收集的信息硬编码的),但这是我在任何地方都能找到的唯一一个直接解决这一问题的页面,因此希望这有助于我们进一步了解这一问题。

在galaxy s2上,您使用的是哪一版本的android?当您删除所有其他内容并仅使用您的输入创建一个页面时会发生什么?您尝试过我的解决方案吗?如果它有效:你能接受这个答案吗?
<div data-role="page">
    <div data-role="content" id="my-form-holder">
    </div>
</div>
<form id="account-add" action="add-edit-account.php" method="post" data-ajax="false" autocomplete="off">
    <div data-role="fieldcontain" class="ui-hide-label">
        <label for="custom-name">
        </label>
        <input name="custom-name" placeholder="Account Name" value="Service Name Here" type="text"><br>

        <label for="custom-1">
        </label>
        <input name="custom-1" placeholder="User ID" type="text"><br>

        <label for="custom-2">
        </label>
        <input name="custom-2" placeholder="Password" type="password"><br>

        <input type="hidden" name="action" value="add-2">
        <input type="hidden" name="newserviceid" value="3">
        <input type="hidden" name="userid" value="1">
        <input id="account-add-submit" type="submit" name="account-add-submit" value="Add Account">
    </div>
</form>
$(ajaxData).appendTo("#my-form-holder").trigger("create");
<div data-role="fieldcontain" class="ui-hide-label">
    <label for="service-search-input">
    </label>
    <input name="service-search-input" id="service-search-input" placeholder="Enter a service to search for" type="search">
</div>