javascript - iOS - 修复了复选框关闭键盘时标题位置发生变化的问题

标签 javascript jquery ios cordova checkbox

我注意到其他与我的问题类似的问答字符串,但是没有什么完全相同,也没有解决我的确切问题。

我有一个文本区域,其下方有 2 个复选框。

在 iOS 设备上输入文本字段(显示虚拟键盘)时,“固定”标题保持在原位,并且当单击键盘上的“完成”时,标题仍正确保持在原位。

我的问题是,一旦有人在字段中输入文本并单击“完成”之前,用户就会取消选中复选框。这会导致标题向下移动。

似乎文本区域对复选框的聚焦/模糊会关闭键盘并配置标题。

如果用户点击屏幕,它可以返回到正确的固定位置。 - 再说一次,有些东西与焦点和模糊之间的状态不相符。

任何帮助将不胜感激。

谢谢

Img 1:在文本区域中输入文本。 Img 2:点击完成后输入文本 - 删除键盘。 图 3:在文本区域中输入文本,然后取消选中复选框 - 删除键盘并“移动”标题的位置。

header shift issue iOS

HTML:

<div class="tweet-inputs">
                <textarea name="tweet" class="tweet-field" placeholder="Share your thoughts..." maxlength="140" ng-model="tweetStatus"></textarea>
            </div>
            <div class="clearfix">

            <div class="check">
                    <input type="checkbox" value=" "name="auto-tag" ng-model="autoHash"/>Auto Hashtag  #MakeDid
                    <input type="checkbox" value=" "name="auto-tag" ng-model="autoHash2"/>Auto Hashtag  #DesignIndaba
                </div>

                <a value="POST" class="tweet-btn nav-btn" ng-click="sendTweet(tweetStatus, autoHash, autoHash2, replyOn)">POST</a><span class="spinning"></span> 
            </div>

CSS:

.header-wrapper {
background: #7a7575;
z-index: 99;
box-shadow: none;
text-align: center;
color: white;
height: 75px;
position: fixed;
top: 0;
left: 0;
width: 100%;
}

JS(我已经包含但似乎不起作用):

$('input[type="checkbox"]').on('focus', function(){
    $('header-wrapper').css({position:'absolute', top: '0'})
    $(window).scrollTop(0)    
})
$('input[type="checkbox"]').on('blur', function(){
    $('header-wrapper').css({position:'fixed'})
})

最佳答案

该问题似乎与键盘出现时 iOS 如何处理固定位置的元素有关。看来 iOS 使固定位置元素绝对定位并应用计算出的坐标,使其看起来位于同一位置。

您可以在带有表单的页面(例如帐单地址页面)上的固定标题的情况下看到这一点。如果您点击较低的字段来访问键盘,然后向上滚动页面,则固定标题会卡在那里,遮挡一些表单...

在这种情况下,似乎还有另一个问题在起作用,那就是当用户立即从键盘输入(文本、文本区域、电子邮件等)聚焦到复选框时,固定定位的元素不会丢失这是假绝对位置。不确定这是否是 iOS 中的错误或什么,但它肯定是渲染不一致。

我的解决方法是强制重新绘制页面(jQuery):

$('[type="checkbox"]').on('click', function() {
    window.setTimeout(function() {
        $(window).scrollTop($(window).scrollTop());
    }, 20);
});

setTimeout 是必需的,因为我认为它会强制页面有足够的延迟来重新定位自己,然后再将其重新提交。在没有 setTimeout 的情况下尝试修复对我来说根本不起作用。

关于javascript - iOS - 修复了复选框关闭键盘时标题位置发生变化的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21857418/

相关文章:

jquery - 数据表:自定义类型

javascript - 颜色选择器插件实验(错误值更新)

iphone - UITableview,垂直居中具有动态高度的单元格对象?

javascript - 如何正确应用Angularjs ng-repeat?

javascript - 即使短语确实存在于数组中,正则表达式搜索也会返回 -1

javascript - 通过反转子串找到最长的回文

ios - Xcode 8 应用程序在 iPhone 上安装失败

javascript - 如何更改 spago 的 Node 堆栈限制?

javascript - 背景图像反射

ios - 在 iOS 上,有没有办法在使用 UIGraphicsBeginImageContextWithOptions 创建 ImageContext 后获取它的大小?