关于ios版的微信,QQ,获取input焦点事件的两个bug

在线测试地址+完整代码: 点击查看

ios中关于input焦点事件的两个bug

  1. 【bug1:错位】手机QQ中打开页面,input框获取焦点后box框位置下移(错位)

  2. 【bug2:自动置顶】微信中获取焦点后,页面直接返回到顶部(应该是要记住之前scrollTop位置的)

clipboard.png

尝试的解决办法:
如果是在ios中的qq,微信中打开,获取焦点后,阻止事件默认行为,并让input的box框的top值等于0;但是不起作用;

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>input焦点事件测试</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<style>
*{
    padding: 0;
    margin: 0;
}
ul li{
    list-style:none;
}
.box{
    border-bottom: 1px solid #ddd;
    position: fixed;
    top: 0;
    width: 100%;
    background: #6faeed;
    padding: 20px;
    margin: 0;
}
.box li{
    width: 33.33%;
    float:left;
}
.box2{
    margin-top: 100px;
}
input{
    width: 90%;
    padding: 7px;
}

</style>

<body>

<div class="box">
    <input type="text" name="搜索框" placeholder="搜索关键字">
    <ul>
        <a href="javascript:"><li>条件一</li></a>
        <a href="javascript:"><li>条件二</li></a>
        <a href="javascript:"><li>条件三</li></a>
    </ul>
</div>
<div class="box2">
    <ol>
        <li>顶部了</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>123</li>
        <li>底部了</li>
    </ol>
</div>



<script type="text/javascript">
var browser={
         versions:function(){
                var u = navigator.userAgent, app = navigator.appVersion;
                return {//移动终端浏览器版本信息
                     trident: u.indexOf('Trident') > -1, //IE内核
                     presto: u.indexOf('Presto') > -1, //opera内核
                     webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
                     gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
                     mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
                     ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                     android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
                     iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
                     iPad: u.indexOf('iPad') > -1, //是否iPad
                     webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
                     weixin: u.indexOf('MicroMessenger') > -1, //是否微信
                     qq: u.match(/\sQQ/i) == " qq" //是否QQ
                 };
              }(),
            language:(navigator.browserLanguage || navigator.language).toLowerCase()
        }

if(browser.versions.mobile || browser.versions.ios ||  browser.versions.iPhone || browser.versions.iPad && brower.versions.qq){
         //焦点事件
         $("input").on("focus",function(e){
             e.preventDefault();
             $(".box").css("top",0);
             console.log(100);
         })
   }
</script>
</body>
</html>
阅读 4.5k
1 个回答
新手上路,请多包涵

试下把input的outline改为none
border设为1px

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题