资讯专栏INFORMATION COLUMN

小技巧|H5禁止手机虚拟键盘弹出

shiguibiao / 367人阅读

摘要:使用方式来阻止虚拟键盘弹出应该是最简单最优雅的方式了。属性规定输入字段为只读。上的解释是它返回当前页面中获得焦点的元素,也就是说,如果此时用户按下了键盘上某个键,会在该元素上触发键盘事件,该属性是只读的。

本文首发于我的博客:http://dunizb.com
原文地址:http://dunizb.com/2017/09/24/disable-the-phone-virtual-keyboard-up/

工作中遇到如下需求,点击输入框弹出自定义弹窗,输入框是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()方法和页面加载。

它里面有很多方法,在浏览器控制台查看,可以看到有很都方法:

MDN上还展示了一个有意思的示例,看这里

那么document.activeElement.blur()为什么可以阻止虚拟键盘弹出呢?原因是:当你点击input的时候,document.activeElement获得了DOM中被聚焦的元素,也就是你点击的input,而调用.blur()方法,blur我相信大家都知道吧,就是取消聚焦。获得被聚焦的元素然后强制blur以达到没有聚焦的样子、、、感觉绕了。

优点:支持Android、iOS
缺点:需要添加额外的JS代码

这句代码加在什么地方?加入有如下HTML

那么这句JS加在事件处理方法中

$("#datePicker").focus(function(){
    document.activeElement.blur();
});
总结

就当前需求来说,用document.activeElement.blur()确实是在绕弯子,直接使用readonly是最佳方案。但是document.activeElement很强大,可以做很多事。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88727.html

相关文章

  • 技巧|H5禁止手机虚拟键盘弹出

    摘要:使用方式来阻止虚拟键盘弹出应该是最简单最优雅的方式了。属性规定输入字段为只读。上的解释是它返回当前页面中获得焦点的元素,也就是说,如果此时用户按下了键盘上某个键,会在该元素上触发键盘事件,该属性是只读的。 本文首发于我的博客:http://dunizb.com原文地址:http://dunizb.com/2017/09/24/disable-the-phone-virtual-keyb...

    mumumu 评论0 收藏0
  • H5项目常见问题汇总及解决方案

    摘要:解决方案可以解决在手机上点击事件的延迟的模块,事件也是为了解决在的延迟问题显示屏原理及设计方案说明屏是一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由个变为多个,如在同样带下的屏幕上,苹果设备的显示屏中,像素点个变为个。 原文链接 - https://github.com/FrontEndRo... H5项目常见问题及注意事项 Meta基础知识: H5页面窗口自动调整到设备...

    marser 评论0 收藏0
  • css前端初始化

    摘要:初入前端,若有不足欢迎指正头部初始化标签问题一般要添加背景音乐的话,我们的第一反应就是使用标签,但是这里有一个坑。 前言 当下移动端横行,平常我们做一些移动端的项目,接触最多的就是H5,虽然做移动端不用兼容IE,但是 我们要兼容微信、app、ios、android... 今天就给写几个平常开发经常会遇到的问题以及解决办法。 初入前端,若有不足 欢迎指正! 头部初始化 ...

    mikyou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<