Javascript 聚焦移动的元素以半聚焦的元素结束

Javascript 聚焦移动的元素以半聚焦的元素结束,javascript,android,css,cordova,webkit,Javascript,Android,Css,Cordova,Webkit,我正在用cordova/phonegap开发一个应用程序。在我的登录页面上,表单位于屏幕底部附近。当用户聚焦某个元素时,我会将表单移动到屏幕顶部,否则它会落在键盘下面 我的问题从这里开始 在我的Galaxy Nexus(4.2.2)上使用已编译的APK或直接使用“浏览器”应用程序访问页面时,它表现出一种完全古怪的行为 点击表单元素后,表单向上移动,键盘弹出。。。表单元素最终处于某种奇怪的半聚焦状态。我通常可以输入,但不会显示光标或选择轮廓,并且按backspace键不会删除字符。其他时候我可以输

我正在用cordova/phonegap开发一个应用程序。在我的登录页面上,表单位于屏幕底部附近。当用户聚焦某个元素时,我会将表单移动到屏幕顶部,否则它会落在键盘下面

我的问题从这里开始

在我的Galaxy Nexus(4.2.2)上使用已编译的APK或直接使用“浏览器”应用程序访问页面时,它表现出一种完全古怪的行为

点击表单元素后,表单向上移动,键盘弹出。。。表单元素最终处于某种奇怪的半聚焦状态。我通常可以输入,但不会显示光标或选择轮廓,并且按backspace键不会删除字符。其他时候我可以输入到。。。在某个地方,但输入框中没有显示任何内容

同样的页面在iOS 7上的Safari和桌面上的Chrome中也能正常工作。该页面在Android上的Chrome浏览器中运行良好

标记:

<div class="form">
    <input type="text" placeholder="focus me">
</div>
Javascript(使用jQuery 2.0.3):

有人知道这是什么原因吗?这是旧Webkit版本中的已知错误吗?有人能提出合理的解决办法吗?我用头撞这个太久了

谢谢。

在重新定位后尝试调用元素上的focus(),在超时后尝试调用(100-300毫秒工作不一致)。试过50种其他东西

最后,我通过在1毫秒超时后执行定位来“修复”它(我使用的术语非常松散)。我的Javascript结果是:

$(".form input").focus(function() {
    setTimeout(function() {
        $(".form").css({'bottom':'', 'top':'15%'});
    }, 1);
});

$(".form input").blur(function() {
    setTimeout(function() {
        $(".form").css({'bottom':'15%', 'top':''});
    }, 1);
});
所有奇怪的行为都消失了。我应该包括一个警告,虽然我有理论,但我根本不知道为什么会这样。如果有人知道Webkit的一个相关bug或者这个问题的一些真实解释,我当然仍然有兴趣听到它


YMMV HTH HAND。

进行了更多的测试。适用于三星S4(4.2.2)“互联网”,但不适用于PhoneGap。曾在浏览器和PhoneGap应用程序中开发过LG Optimus G(Android 4.0.4)。如果我在focus上添加一个负边距,而不是绝对定位,则效果相同。
$(".form input").focus(function() {
    $(".form").css({'bottom':'', 'top':'15%'});
});

$(".form input").blur(function() {
    $(".form").css({'bottom':'15%', 'top':''});
});
$(".form input").focus(function() {
    setTimeout(function() {
        $(".form").css({'bottom':'', 'top':'15%'});
    }, 1);
});

$(".form input").blur(function() {
    setTimeout(function() {
        $(".form").css({'bottom':'15%', 'top':''});
    }, 1);
});