js控制ios端的input/textarea元素失去焦点时隐藏键盘

同事在测试产品时发现这样一个:“某些页面击完input框,在点空白处时,iOS设备的键盘不能隐藏并且焦点也不会失去

带着这个问题我进行了测试,发现在安卓的设备上并没有这种问题出现。

于是写js进行测试给document添加一个click事件,发现了问题的原因:

安卓是可以触发click事件的,而iPhone不会触发。

也就是说在iOS设备下你点击空白的document处input并不能失去焦点。

解决办法:

既然click不能触发iPhone的事件,那就需要找触屏事件来触发一次:

objBlurFun("input");

//如果不是当前触摸点不在input上,那么都失去焦点
function objBlurFun(sDom,time){
    var time = time||300;
     var browser={
        versions:function(){
            var u = navigator.userAgent, app = navigator.appVersion;
            return {
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
            };
        }(),
        language:(navigator.browserLanguage || navigator.language).toLowerCase()
    }
    if(browser.versions.ios){
       var obj = document.querySelectorAll(sDom);
       for(var i=0;i<obj.length;i++){
           objBlur(obj[i],time);
       }
    }
}
// 元素失去焦点隐藏键盘
function objBlur(sdom,time){
    var time = time||300;
     if(sdom){
        sdom.addEventListener("focus", function(){
                document.addEventListener("touchend", docTouchend,false);
        },false);

     }else{
         throw new Error("objBlur()没有找到元素");
     }
     var docTouchend = function(event){
        if(event.target!= sdom){
            setTimeout(function(){
                 sdom.blur();
                document.removeEventListener(‘touchend‘, docTouchend,false);
            },time);
        }
     };

}
时间: 2024-12-12 08:40:02

js控制ios端的input/textarea元素失去焦点时隐藏键盘的相关文章

IOS下H5的input/textarea元素失去焦点时隐藏键盘

IOS下document添加一个click事件不触发,不会失去焦点,导致点击input框外的其它地方不会自动消失键盘,还有就是双击其它空白地方会导致整个页面上移 既然click不能触发,可以用移动端的touch事件进行: ontouchstartontouchmoveontouchendontouchcancel 判断当前点击的元素是不是在输入框上,不是就调用blur()方法主动失去焦点即可.

input 输入框获得/失去焦点时隐藏/显示文字(jquery版)

input输入框在获得或失去焦点时隐藏或显示文字,这样的焦点效果想必很多朋友在填写form表格的时候都曾见识过吧,本文使用jquery实现以下,感兴趣的朋友可以参考下哈 大家可以看效果图的搜索输入框,默认显示着“用户名/Email”的提示,当这个 input 输入框获得焦点时,就自动清空等待用户输入,当用户啥也没输入就离开这个 input 输入框时,输入框内又再次显示“用户名/Email”的提示.是不是很常见?很多搜索.登录.表单都会用到这个效果,但是我看了N多个网站,有90%以上是这么实现的:

Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. wap银联支付流程是这样:客户端---> 服务器(构建支付请求)--> 银联支付 ---> 返回到服务端(处理支付结果).所以对于手机网站银联支付没有问题,但是对于ios端app和android端app, 再通过wap支付,发现支付成功后,很难在回到app客户端了. 所以这里就必须借助Pho

解决IOS safari在input focus弹出输入法时不支持position fixed的问题

该文章为转载 我们在做移动web应用的时候,常常习惯于使用position:fixed把一个input框作为提问或者搜索框固定在页面底部.但在IOS的safari和webview中,对position:fixed的支持不是很好(在IOS5之前甚至还不支持position:fixed).我遇到的其中一个问题就是,在iOS6+环境下,input focus弹出输入法的时候,设置了position fixed的input框浮在页面上了,而不是吸附在软键盘上.效果如图(图片来源于网上): 而Androi

去掉移动端页面 input, textarea, button, a 标签获取焦点时显示的黑影

input, textarea, button, a{ -webkit-tap-highlight-color:rgba(0,0,0,0); }

h5 ios微信浏览器 input获取焦点后,收起软键盘,光标错位

整个页面布局如下: 外层设置fixed的原因是不让页面在浏览器中进行上下拖拽, 最后形成的结果是:输入框获取焦点输入内容后,光标错位,导致不能选中输入框重新获取焦点(页面上移,但是布局未产生影响); 解决 改变页面布局: 外层fixed取消,改用 display:flex布局,将内容分为3部分,中间内容flex-grow: 1; 好了 给input设置fixed或者input的父元素设置fixed 导致此原因 原文地址:https://www.cnblogs.com/bigsister/p/10

去除浏览器中a、input获得焦点时的高亮边框

a,input等元素在android原生浏览器下获得焦点时,元素外围会出现一个橙色的高亮边框 若要去除它,通常的办法是: 代码如下 复制代码 a:focus,input:focus{ -webkit-tap-highlight-color:rgba(0,0,0,0); } 不过看起来,这种方案在android 4.0以上版本的浏览器中是无效的.已知的一种在android 4.0以上版本浏览器中可以移除高亮边框的办法是: 代码如下 复制代码 a:focus,input:focus{ -webkit

用js控制没有名字的表单 进行提交

在BS前台设计中,某些地方提交表单是非常方便的. 但是表单的也是有很多中形式的. 表单的创建形式: 1.用<form></form>进行创建 2.直接设置表单的属性创建一个没有名字的表单 1.对于有名字的表单,可以直接写js事件进行提交 //设置表单提交方式 $('#importMethod').form({ url: "/QuestionType/FuzzyQueryQuestionType", onSubmit: function () { //进行表单验证

JS判断移动端还是PC、移动端px转换成rem、移动端圆角

判断PC还是移动if(/AppleWebKit.Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){ if(window.location.href.indexOf(