微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo

前言

做好了项目之后,在各种浏览器里面測试,都没有问题.非常高兴,交付后端使用.然而发如今微信自带浏览器里面,却是出现了问题.

我的页面是一堆文本框,须要用户输入,当页面比較长的时候,在以下的文本框会被输入法给挡住…我勒个去.

写了一段JS脚本,測试了一下,发现,在正常的浏览器其中,当调出输入法的时候,视窗的高度,会降低,以适应输入法占领的屏幕空间.在QQ自带的浏览器里面,也是全然正常的.仅仅有在微信里面,存在这个问题.而且,表现形式非常奇葩:

机型 表现形式
iphone6 看上去正常,但视窗高度并没有改变.页面能够滑动
iphone5 不正常,能滑动,但默认没有滑动到当前input
红米note 正常,没有问题
小米4/5 不正常,不能滑动,无法使用

与手机操作系统和微信版本号都有关系,上面的表格仅仅是我这边的測试结果.

反正不管怎样,微信自带的浏览器不会由于调出输入法就改变视窗的高度,这是最核心的问题.

思路

项目已经做好了,我如今仅仅能打个补丁上去,通篇的解决这个该死的兼容性问题.项目中採用了jquery2版本号.因此,这个补丁使用jquery语法来写.

  1. 要将当前焦点的文本框调整到可视区域
  2. 要给页面尾部添加空间,以抵消输入法的高度占领的空间
  3. 考虑性能,仅仅能给微信使用,其它浏览器不运行.

开工

首先找来一段推断是否在微信浏览器的代码,例如以下:

// 推断是否是微信
function is_weixn(){
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger") {
return true;
} else {
return false;
}
}

考虑了一下我的项目中,全部出现这个问题的地方,都是使用了input标签.可是,并不是全部的input标签都须要调用出输入法,比方button和多选框等.因此,我自己构建了一个推断是否须要调用输入法的函数,例如以下:

// 推断是否为文本框
function is_text(type){
if (type=="text" || type=="number" || type=="password" || type=="tel" || type=="url" || type=="email") {
return true;
};
}

最后,依照自己的想法,攻克了一下这个问题,代码例如以下:

// 用于解决微信自带浏览器输入法遮挡文本框的处理
$(function(){
if (is_weixn()){
var inp = $("input"),
win = $(window),
bod = $("body"),
winH = win.height();
inp.each(function(){
var t = $(this),
tTop = t.offset().top,
tType = t.prop('type');
if (is_text(tType)) {
t.on('click',function(event) {
bod.height(winH+300);
bod.animate({scrollTop: tTop-100 + 'px'}, 200);
});
};
});
};
})

应该是有优化的空间的.只是我的JS水平真心一般.临时先解决问题吧-_-|||

本文由FungLeo原创,转载请保留版权申明,以及首发地址: http://blog.csdn.net/fungleo/article/details/51005911

微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo的更多相关文章

  1. JS给文本框赋值后,在页面后台取不到文本框值的解决方法

    转自:http://www.cnblogs.com/qiaohd/archive/2012/03/23/2413660.html (ReadOnly.disabled 都有可能造成取值取不到) 开发一 ...

  2. 微信自带浏览器不支持form表单post提交方案解决

      微信自带浏览器form表单post提交,Java控制后台获取不到值得解决方案: 第一种:把post改成get请求,但是改后另一个问题来了就是,数据不安全了,连接上都能看到,导致数据会流失,Java ...

  3. 安卓版微信自带浏览器和IE6浏览器ajax请求abort错误处理

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46419567 给页面元素绑定了一个click事件用来触发ajax请求.在安卓微信自 ...

  4. 兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法

    兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法 // 获取事件function getEvent(){ if(window.event) {return w ...

  5. [Swift通天遁地]一、超级工具-(3)带切换图标的密码文本框

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. 微信小程序丨将溢出的文本用省略号代替的方法

    下面进入正题,有关于将溢出的文本用省略号代替的方法,不知道什么原因,我的程序用传统的代码无法解决: .text{ white-space: nowrap; overflow: hidden; text ...

  7. IOS系统下虚拟键盘遮挡文本框问题的解决

    最近在项目中发现同样的代码在Android端微信网页中点击文本框唤出的虚拟键盘不会遮挡文本框,但是在IOS端的微信网页中点击文本框唤出的键盘却在大部分情况下会遮挡文本框 经过高人指点,这个问题终于解决 ...

  8. 浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

    * IE浏览器的内核Trident. Mozilla的Gecko.google的WebKit.Opera内核Presto: * png24为的图片在iE6浏览器上出现背景,解决方案是做成PNG8. * ...

  9. js限制文本框只能输入数字方法小结

    有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数  代码如下: <input onkeyup="i ...

随机推荐

  1. iOS-----openGL--openGL ES iOS 入门篇3---> 纹理贴图(texture)

    在这篇文章中,我们将学习如何在openGL中使用纹理贴图. penGL中纹理可以分为1D,2D和3D纹理,我们在绑定纹理对象的时候需要指定纹理的种类.由于本文将以一张图片为例,因此我们为我们的纹理对象 ...

  2. 漫谈DNS

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6189633.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  3. 【Luogu】P3313旅行(树链剖分)

    题目链接 动态开点的树链剖分qwq. 跟小奇的花园一模一样,不做过多讲解. #include<cstdio> #include<cstring> #include<cct ...

  4. 【Luogu】P3177树上染色(树形DP)

    题目链接 题没想出来很烦+一堆细节要注意很烦. 当然更可能是我智商被osu吃了. 考虑一条边会有什么贡献?它一边的黑点数*另一边的黑点数*边权. +它一边的白点数*另一边的白点数*边权. 这样一来就成 ...

  5. UVa——1593Alignment of Code(string重定向+vector数组)

    UVA - 1593 Alignment of Code Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & ...

  6. BZOJ4010 [HNOI2015]菜肴制作 【拓扑排序 + 贪心】

    题目 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间 ...

  7. BZOJ2326 [HNOI2011]数学作业 【矩阵快速幂】

    题解 我们设f[i]表示前i个数模M意义下的答案 则f[i] = f[i - 1] * 100...0 + i[i是几位就有几个0] 可以写出矩阵递推式: 之后按位数分组矩乘就好了 #include& ...

  8. iOS-Core Data基础

    Core Data基础 Core Data是一个API集合,被设计用来简化数据对象的持久存储. 在此先不普及概念,先通过一个简单的案例使用来感受一下Core Data的精妙之处. 在创建工程的时候勾选 ...

  9. SQL的主键和外键和唯一约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  10. 【CF1015A】Points in Segments(签到)

    题意:有一条上面有n个点的数轴,给定m次操作,每次覆盖(x[i],y[i]),求最后没有被覆盖过的点的数量与他们的编号 n,m<=100 思路: #include<cstdio> # ...