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中通过render函数给子组件设置ref操作
Nov 17 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
vue使用echarts画组织结构图
Feb 06 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
Vue + iView实现Excel上传功能的完整代码
Jun 22 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
vue自定义右键菜单之全局实现
Apr 09 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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中的日期处理方法集锦
2007/01/02 PHP
又一个php 分页类实现代码
2009/12/03 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
php取得字符串首字母的方法
2015/03/25 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
Python中的字符串类型基本知识学习教程
2016/02/04 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
造价工程师个人求职信
2013/09/21 职场文书
室内设计自我鉴定
2013/10/15 职场文书
高三历史教学反思
2014/01/09 职场文书
公司门卫岗位职责
2014/03/15 职场文书
2015年预算员工作总结
2015/05/14 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
创业计划书之干洗店
2019/09/10 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
小程序实现侧滑删除功能
2022/06/25 Javascript