Js控制iphone端的input/textarea元素失去焦点时隐藏键盘
2017-06-16 14:58
573 查看
http://www.cnblogs.com/dtdxrk/p/3682352.html
src="https://img-blog.csdn.net/20170616145844463?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzI5NjM4NDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" border="0" >
IPHONE系统在点击document时textarea为什么没有失去焦点?
同样的问题我又在Android系统上测试了一下可以自动隐藏,只有IPHONE有这问题。于是上网搜了搜相关的方法显示隐藏键盘的方法都是基于APP的而没有js的,看来需要自己动手解决了。
于是写js进行测试给document添加一个click事件,发现了问题的原因:
android是可以触发click事件的,而IPHONE不会触发。
也就是说在IPHONE下你点击空白的document处textarea并不能失去焦点。
使用触屏事件
既然click不能触发IPHONE的事件,那就需要找触屏事件来触发一次:ontouchstart
ontouchmove
ontouchend
ontouchcancel
最后我选择用ontouchend,手指离开屏幕时触发。
想过的办法1:点击A标签可以让textarea失去焦点
在textarea获得焦点时,点击A标签可以让textarea失去焦点,隐藏IPHONE的键盘。实现的思路就是:
1.textarea在获得焦点时
2.当ontouchend移动到document空白处时创建一个A标签,模拟A标签的点击事件
3.textarea失去焦点,隐藏IPHONE的键盘
这个方法想出来简单实验了一下,感觉太蛋疼了,直接pass掉。。。
想过的办法2:让textarea主动失去焦点
1.textarea获得焦点时2.给document添加一个ontouchend事件,判断当前点击的元素是不是textarea本身 如果不是 textarea会失去焦点
3.document移除ontouchend事件
觉得还是这个方法靠谱,最终按照这个思路去解决。
最终方法
1.由于是在触屏上使用所以没有用到IE的二级事件。2.做了一个判断,只在IPHONE上触发。
3.当时做完了同事说方法执行的太快了,客户来不及反应键盘就隐藏了,于是添加了一个time参数用做settimeout设置。
//判断是否为苹果 var isIPHONE = navigator.userAgent.toUpperCase().indexOf('IPHONE')!= -1; // 元素失去焦点隐藏iphone的软键盘 function objBlur(id,time){ if(typeof id != 'string') throw new Error('objBlur()参数错误'); var obj = document.getElementById(id), time = time || 300, docTouchend = function(event){ if(event.target!= obj){ setTimeout(function(){ obj.blur(); document.removeEventListener('touchend', docTouchend,false); },time); } }; if(obj){ obj.addEventListener('focus', function(){ document.addEventListener('touchend', docTouchend,false); },false); }else{ throw new Error('objBlur()没有找到元素'); } } if(isIPHONE){ var input = new objBlur('input'); input=null; }
相关文章推荐
- Js控制iphone端的input/textarea元素失去焦点时隐藏键盘
- Js控制iphone端的input/textarea元素失去焦点时隐藏键盘
- Js控制iphone端的input/textarea元素失去焦点时隐藏键盘
- js控制iphone端的input/textarea元素失去焦点时隐藏键盘
- h5键盘遮挡输入框问题 、模仿微信输入框失去焦点时隐藏iphone的软键盘和聚焦时出现输入框
- html中的css和js控制input,textarea文本框自动获取焦点
- h5键盘遮挡输入框问题 、模仿微信输入框失去焦点时隐藏iphone的软键盘和聚焦时出现输入框
- js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件
- 记录H5页面IOS中input输入框失去焦点后,键盘隐藏
- 我的Web学习之路1——input,textarea获得/失去焦点时隐藏/显示文字
- JS控制文本框内键盘上下左右键的焦点
- js--在页面元素上(移动到或获取焦点)、鼠标离开(或失去焦点)
- input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
- js控制输入框获得和失去焦点时状态显示的方法
- js控制元素隐藏显示,显示时不用display=block
- 如何通过代码控制软件键盘的显示与隐藏(InputMethodManager 的使用)
- js控制元素的显示与隐藏
- angularjs ng-click传参控制ng-repeat元素显示与隐藏
- javascript 控制ios textarea 不失去焦点问题
- input 输入框获得/失去焦点时隐藏/显示文字