Jquery 键盘覆盖webapp(iOS)中的文本输入

Jquery 键盘覆盖webapp(iOS)中的文本输入,jquery,ios,web-applications,input,keyboard,Jquery,Ios,Web Applications,Input,Keyboard,我正在开发一个webapp,屏幕下半部分有两个输入字段。父视图绝对位于屏幕上。通常,人们会假设单击输入字段时,焦点将强制输入到键盘上方的视图中。但是,键盘覆盖了输入字段 如果我开始输入,字段中不会输入任何内容。为了输入字段,我必须点击下一个箭头,然后点击上一个箭头(>进入字段#2,然后

我正在开发一个webapp,屏幕下半部分有两个输入字段。父视图绝对位于屏幕上。通常,人们会假设单击输入字段时,焦点将强制输入到键盘上方的视图中。但是,键盘覆盖了输入字段

如果我开始输入,字段中不会输入任何内容。为了输入字段,我必须点击下一个箭头,然后点击上一个箭头(>进入字段#2,然后<返回字段1),以查看输入


我已经尝试过调整视图,使其具有溢出滚动、相对位置,并以编程方式在点击时设置焦点。这些解决方案都不起作用。不幸的是,我只能找到与UITextViews相关的答案,以及存在完全相反问题的人(即,不希望它自动滚动)。

以下是对位于

“好吧,这可能是你见过的最糟糕的黑客行为,但它什么也比不上

您可以做的是动态更改文本框的位置(使用javascript)要固定,位置:固定,这将更改文本框相对于浏览器窗口的位置,而不是相对于页面的位置。这将使Iphone的滚动不相关,并且无论发生什么情况,文本框都应位于页面顶部。然后,在onBlur中,css位置再次设置为相对位置(这将使其回到原来的位置)


为了使它更漂亮,你可以在文本框后面的焦点上放置一个div,这样它就隐藏了实际的网站内容,你可以使用顶部和左侧的css属性将文本框居中(只需确保清除那些过于模糊的属性)。“

如果没有简化的代码示例,很难判断,但是你可以尝试在第一个字段上注册一个点击处理程序,然后聚焦其中的第二个字段,然后再聚焦第一个字段,在jQuery中看起来像这样:

$('#first_field').on('click', function(){
  $('#second_field').focus();
  $('#first_field').focus();
});

这很可能行不通,但值得一试。否则你将不得不开始搞乱你的CSS和定位。不幸的是,在某些情况下,iOS上的WebKit在重新定位和缩放窗口以显示输入字段和键盘时会出现问题。

对于任何感兴趣的人来说,简单的解决方案是:

在您希望始终可见的输入上注册
onfocus
事件,如下例所示。由于我们不知道键盘何时会完全呈现,代码每300毫秒执行5次(持续时间为1.5秒)。你可以根据自己的口味来调整

此解决方案唯一需要注意的是,它依赖于
scollIntoView
,这在某些旧浏览器上可能无法工作(请参阅)。当然,您可以用一个等价的算法来替换它,以获得相同的结果。不管怎么说,这个简单的解决方案应该会让你产生想法

var scrolling=函数(e,c){
e、 scrollIntoView();
如果(c<5)设置超时(滚动,300,e,c+1);
};
var可修改=函数(e){
设置超时(滚动,300,e,0);
};
这里有一些文本

这里有一些文字


这是一个对本机和第三方键盘都测试正常的解决方案:

    $('#foo').on('blur',function(){
        setTimeout(function(){
            window.scrollTo(0,document.body.clientHeight); 
    }, 300); 
    });

    $('#foo').on('focus',function(){
        setTimeout(function(){
            window.scrollTo(0,100000);
        }, 300); 

    });

$(“#foo”)
是您遇到问题的输入元素,这里的关键是为文档滚动提供设置超时延迟。因为我们需要一些时间让ios键盘弹出完成,以便在弹出后获得正确的文档滚动顶部

谢谢,但问题在于HTML输入标记,而不是我看到的原生UITextFieldAh。让我再做些研究,有没有解决办法?我也有同样的问题。我对scrollTop有点不满,但不一致。它适用于某些领域和其他领域。