工作中遇到如下需求,点击输入框弹出自定义弹窗,输入框是input标签:
但是在移动端,input会默认触发手机的虚拟键盘,如何阻止手机虚拟键盘弹起呢?目前我试过有两个方案,一个是给input添加readonly属性,另一个就是在input事件处理方法前面添加一句document.activeElement.blur() 。
readonly
使用readonly方式来阻止虚拟键盘弹出应该是最简单最优雅的方式了。readonly 属性规定输入字段为只读。只读字段是不能修改的。不过,用户仍然可以使用 tab 键切换到该字段,还可以选中或拷贝其文本。
值得一提的是它的取值,只要声明了readonly属性,不管取什么值都可以,比如readonly=""、readonly="readonly"、readonly="abc"都是一样的
优点:简单
缺点:在iOS的Safari中无效(未做更多情况测试)
document.activeElement.blur()
这是个什么玩意儿?document.activeElement是一个Web API接口。MDN上的解释是:它返回当前页面中获得焦点的元素,也就是说,如果此时用户按下了键盘上某个键,会在该元素上触发键盘事件,该属性是只读的。
document.activeElement属性始终会引用DOM中当前获得了焦点的元素。元素获得焦点的方式有用户输入(通常是按Tab键)、在代码中调用focus()方法和页面加载。
它里面有很多方法,在浏览器控制台查看,可以看到有很都方法:
那么document.activeElement.blur()为什么可以阻止虚拟键盘弹出呢?原因是:当你点击input的时候,document.activeElement获得了DOM中被聚焦的元素,也就是你点击的input,而调用.blur()方法,blur我相信大家都知道吧,就是取消聚焦。获得被聚焦的元素然后强制blur以达到没有聚焦的样子、、、感觉绕了。
优点:支持Android、iOS
缺点:需要添加额外的JS代码
这句代码加在什么地方?加入有如下HTML
<div class="calendar"> <div> <input type="text" id="datePicker" class="date_picker" placeholder="点击选择入住日期"/> </div> </div>
那么这句JS加在事件处理方法中
$("#datePicker").focus(function(){ document.activeElement.blur(); });
总结
就当前需求来说,用document.activeElement.blur()确实是在绕弯子,直接使用readonly是最佳方案。但是document.activeElement很强大,可以做很多事。
到此这篇关于Html5页面上如何禁止手机虚拟键盘弹出的文章就介绍到这了,更多相关Html5手机键盘弹出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!
png透明 AlphaImageLoader filter:progid:DXImageTransform.Microsoft.AlphaImag...
1、在HTML头部增加viewport标签。 在网站HTML文件的开头,增加viewport meta标签...
Dreamweaver中想要给文字添加阴影,该怎么添加多个阴影呢?下面我们就来看看详细...
设计上图中的网页: !DOCTYPE htmlhtml lang=enhead meta charset=UTF-8 meta na...
本文主要介绍了详解css3 flex弹性盒自动铺满写法,分享给大家,具体如下: style...
虽然这东西号称跨平台支持浏览器,但建议还是不要使用这个前端框架开发PC端的网...
各位参赛选手: 2020 腾讯 Light.公益创新挑战赛自报名开启以来,反响热烈,因参...
简介: Dapr 是 2019 年 10 月微软开源的可移植、事件驱动分布式运行时,它使开...
使用Adobe Dreamweaver时,在代码视图里, 如果有中文, 用鼠标点击时, 光标的落位...
看到了很多人写的太极图案,自己也来搞一下,今天就来介绍一下 css样式代码 .ani...