vue 表单输入框不支持focus及blur事件的解决方案


Posted in Vue.js onNovember 17, 2020

采用指令的方式来解决这个问题(此处的前端框架以mint-ui为例):

1.html引用: v-mtfocus

vue 表单输入框不支持focus及blur事件的解决方案

2.在实例中添加指令

directives: {
  'mtfocus' (el, binding, vnode) {
   let mtinput = el.querySelector('input')
   mtinput.onfocus = function () {
    ...//如果要对节点的数据进行更改,且更改要映射到页面上,则更改可在vnode.context上进行,这样,改完之后,改变就会映射到页面
   }
   mtinput.onblur = function () {
    ...//同上理
   }
  } 
 }

补充知识:vue中实现点击按钮使input显示的同时获取焦点

需求说明:点击搜索按钮出现input框,并自动使input框聚焦。

如图所示:

vue 表单输入框不支持focus及blur事件的解决方案

实现方式1:利用vue的ref

html代码如下:

<input ref="inputVal" class="searchInp" type="text" v-model="searchVal" placeholder="搜索标题或内容..." />
<div v-show="searchBtnFlag" class="searchBtn" @click="searchIn">
 <i class="iconfont icon-search1187938easyiconnet"></i> 搜索
</div>

Js代码如下:

searchIn(){
 this.searchBtnFlag = !this.searchBtnFlag;
 this.$nextTick(function () {
  //DOM 更新了
  this.$refs.inputVal.focus()
 })
},

重点:只需要把需要的操作放在$nextTick内即可。

实现方式2:利用js(原理其实等同于方式1)

<input id="inputVal" class="searchInp" type="text" v-model="searchVal" placeholder="搜索标题或内容..." />
<div v-show="searchBtnFlag" class="searchBtn" @click="searchIn">
 <i class="iconfont icon-search1187938easyiconnet"></i> 搜索
</div>

Js代码如下:

searchIn(){
 this.searchBtnFlag = !this.searchBtnFlag;
 this.$nextTick(function () {
 document.getElementById("inputVal").focus();
 })
},

说明:必须在$nextTick内使用方法是因为:dom更新的先后顺序的问题,不是所有的数据改变一定会触发dom的更新,而在修改数据之后立即使用这个方法,可以获取更新后的 dom。

误区:直接使用autofocus

html:

<input v-bind:autofocus="!searchBtnFlag" class="searchInp" type="text" v-model="searchVal" placeholder="搜索标题或内容..." />
<div v-show="searchBtnFlag" class="searchBtn" @click="searchIn">
  <i class="iconfont icon-search1187938easyiconnet"></i> 搜索
</div>

js:

searchIn(){
   this.searchBtnFlag = !this.searchBtnFlag;
   this.$nextTick(function () {
  document.getElementById("inputVal").focus();
   })
 },

这样的写法只在第一次时起作用,如果点击取消后再次点击搜索按钮则不会再次使input框自动聚焦。

记录一下,以备以后忘了好找。

以上这篇vue 表单输入框不支持focus及blur事件的解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue使用vant中的checkbox实现全选功能
Nov 17 Vue.js
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
Vue 的 v-model用法实例
Nov 23 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue如何实现组件间通信
May 15 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 #Vue.js
Vue项目利用axios请求接口下载excel
Nov 17 #Vue.js
vue实现下载文件流完整前后端代码
Nov 17 #Vue.js
vue+iview实现文件上传
Nov 17 #Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 #Vue.js
vue+iview实现分页及查询功能
Nov 17 #Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 #Vue.js
You might like
PHP 文件上传全攻略
2010/04/28 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python爬取网站数据保存使用的方法
2013/11/20 Python
python处理中文编码和判断编码示例
2014/02/26 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
简单谈谈python中的多进程
2016/11/06 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python中文编码知识点
2019/02/18 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
领导干部对照检查材料
2014/08/24 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
计划生育目标责任书
2015/05/09 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
MySQL索引是啥?不懂就问
2021/07/21 MySQL
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js