Vue使用el-input自动获取焦点和二次获取焦点问题及解决

目录
  • 使用el-input自动获取焦点和二次获取焦点问题
  • 使input和el-input自动获取焦点的处理
  • 总结

使用el-input自动获取焦点和二次获取焦点问题

最近,碰到一个问题,就是输入框旁边有一个编辑按钮,点击时,才可以对输入框进行编辑:

要实现的效果:

为了方便输入,需要自动获取焦点,所以加入了autofocus,但是发现,只有第一个并且第一次点击才起作用。

查了网上的一些文档,说是跟dom的渲染顺序和数据的缓存有点儿关系,至于深层次的原因,还没查到。

然后使用了Vue提供的自定义指令来解决,还有一点儿需要注意,el-input在页面渲染后,外层是个div,需要拿到里面的input才会有效果。

<el-input v-focus></el-input>

directives: {
  // 注册一个局部的自定义指令 v-focus
  focus: {
    // 指令的定义
    inserted: function (el) {
      // 聚焦元素
      el.querySelector('input').focus()
    }
  }
},

还有一种解决方案,是使用 Vue.nextTick() 和 Ref去做,例子就不去写了,都是去操作dom的。

使input和el-input自动获取焦点的处理

【普通input的自定义指令操作】:先在入口文件注册一个全局自定义指令

// main.js
Vue.directive('focus', {
  inserted (el, binding, vnode) {
    // 聚焦元素
    el.focus()
  }
})

【普通input的自定义指令使用】:v-"+指令名"

// index.vue
<input v-focus placeholder="因为有v-focus,所以我聚焦了" />

【el-input的自定义指令操作】:先在入口文件注册一个全局自定义指令

// main.js
Vue.directive('fo', {
  inserted (el, binding, vnode) {
    // 聚焦元素
    el.querySelector('input').focus()
  }
})

【el-input的自定义指令使用】:v-"+指令名"

// index.vue
<el-input v-fo placeholder="因为有v-fo,所以我聚焦了"></el-input>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • el-input无法输入的问题和表单验证失败问题解决

    目录 1.el-input无法输入的问题 原因1.el-input组件没有绑定双向响应式数据(v-model) 原因2.组件嵌套太深还是该组件是一个坑(具体原因不清楚,只知道解决方法) 解决方法的步骤 2.表单验证失败的问题 总结 1.el-input无法输入的问题 原因1.el-input组件没有绑定双向响应式数据(v-model) 解决方案:在data中定义一个变量,然后在el-input组件中使用v-model进行双向数据绑定,这样子就会解决el-input组件无法输入的问题了. 原因2.

  • Vue-element中el-input输入卡顿问题的解决

    目录 Vue-element中el-input输入卡顿 解决方法 vue遇到 el-input有时无法输入的bug 总结 Vue-element中el-input输入卡顿 最近使用Vue-element时,遇到了el-input输入卡顿问题,影响用户体验,如下 el-input是这样写的,没有加额外的事件 <el-input v-model="code" placeholder="code" type="textarea" :rows=&q

  • vue el-input输入框输入不了的解决方法

    目录 一.问题 二.解决方法 三.总结 一.问题 1.今天写代码遇到了一个很奇葩的问题:写了很多个输入框,其他输入框都没有问题,就最后一个单独处理的有问题,输入框里面输入不了东西.着实不明白为什么,一遍又一遍抱怨,重复输入,里面还是除了原有的值什么都输不了. 除了原有的3,什么都输不了 二.解决方法 1.用vue dev-tools审查了才发现这个输入框无论输入什么,value值都是不变化,尽管 也触发了input事件(和html没有关系) html的逻辑也完全相同,定义的对象的value和v-

  • 详解elementUI中input框无法输入的问题

    最近发现别人项目中在输入密码的时候发现input框无法输入进去 键盘都快敲坏了还是无法输入 通过各种排查.还是无法解决这个问题 后面无意中发现 elementUI中@input事件可以拿到当前的输入的值 问题找到了 视图没有更新的问题 那么怎么解决了 刷新通过this.$forceUpdate() 可以解决这个问题 这样的话这个问题就解决了 原因可能是由于组件嵌套太深(不是很了解为啥出现这个问题有没有大神解释一波 ) 到此这篇关于详解elementUI中input框无法输入的问题的文章就介绍到这

  • Vue项目中input框focus时不调出键盘问题的解决

    目录 input框focus时不调出键盘问题 自动获取input焦点(内含ios不能唤起键盘解决方法) 最开始的用法 如果想要解决ios不生效办法 input框focus时不调出键盘问题 在移动端,实现input框获得焦点的同时不会唤起手机键盘. 亲测有效!!! <input type="text" placeholder="收货地址" v-model="address3" @focus.prevent="showcountF&q

  • element input输入框自动获取焦点的实现

    最近项目中在做表单的时候,需要自动滚动到评论框,并且让评论框自动聚焦,这就需要手动触发输入框的 focus 状态. 但是,element并不支持autofocus属性,那就只能通过原生的js效果获取聚焦效果了 document.getElementById("input").focus(); 或者利用vue的ref属性也可以实现聚焦效果: 原理其实很简单,Element 已经提供了 focus 方法,但是文档并没有写明如何去调用,下面是在el-input标签上加入ref属性,然后在需要

  • vue中监听input框获取焦点及失去焦点的问题

    目录 一.背景 二.首先是正宗的监听事件的写法 1.html代码 2.JS部分 三.为什么上次监听焦点事件失败呢 1.不好用的原因 2.新增指令的方法 一.背景 博主之前在用vue的获取焦点,失去焦点的时候,出现了@blur和@focus无效的情况.当时百思不得其解.今天又在写vue页面的时候,突然@blur和@focus又好用了.emmmm,看来这部分值得一战. 二.首先是正宗的监听事件的写法 1.html代码 //这是html的输入框.定义了一个获取焦点,失去焦点的方法 <input pla

  • vue.js的简单自动求和计算实例

    一.导入vue.js 可以用cdn,也可以用内嵌去官网下载插件https://vuejs.org/js/vue.js. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script> 二.前端页面 我用了一个表格,话不多说直接上代码 <div id="vuetest"> <table> <tr> <td>数学</td>

  • vue3输入框生成的时候如何自动获取焦点详解

    目录 前言 创建实例演示(创建文件,可忽略) 解决方法 1.方法一 2.方法二 总结 前言 当我们在做vue3的项目的时候,在对一些信息的修改的时候,需要双击或者点击按钮来进行操作,让数据变成输入框来进行修改数据,当输入框失去焦点的时候就进行保存,然而不方便的是,输入框出现的时候不能获取焦点导致用户的体验不好. 创建实例演示(创建文件,可忽略) 首先我们需要一个vue3的项目,如何创建一个vue3的项目,新建一个空的文件夹,cmd打开,输入 1. vue create 项目的名称举例:vue c

  • vue中使用input[type="file"]实现文件上传功能

    注意:input[type="file"] 标签中的属性accept="application/msword,application/pdf" 在pc上正常,但是在手机ios和android上这个文件格式限制会被忽略,所以需要在js中增加格式的判断,以及对应显示样式的设置.(我也是刚发现,如果有遇到这个问题的可以参考下---下面有更改:) ``` <template> <div id="my-careers"> <h

  • vue监听input标签的value值方法

    由于项目需要做实时搜查询数据,所以需要监听input标签的value,这里使用的前端框架vue <input id="materialSearch" type="text" @keyup.enter="search" @input="search($event)"/> 这里的重点是:@input="search($event)",表示当文本框有内容输入时,则调用search方法 /*模糊搜索*/

  • vue element-ui实现input输入框金额数字添加千分位

    在util.js中定义方法 包含金额添加过滤千分位,验证金额格式等 const MoneyTest = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/; // 金额添加千分位 const comdify = function (n) { if(!n) return n; let str = n.split('.'); let re = /\d{1,3}(?=(\d{3})+$)/g; let n1 = str[0].replace(re, "$&,");

  • vue.js 输入框输入值自动过滤特殊字符替换中问标点操作

    我就废话不多说了,大家还是直接看代码吧~ <Input v-model="relatedWords" type="textarea" placeholder="请输入" @input='verifyInput(formItem.relatedWords)'/> verifyInput(v){ let _this=this; let punctuation = /[`~!@#$%^&*_\-=<>?:"{}

  • vue点击弹窗自动触发点击事件的解决办法(模拟场景)

    业务场景:使用vue +element ui 的el-dialog,点击弹窗之后,默认加载第一个按钮的数据进行初始化. div 指令: // 自动触发点击事件 directives:{ trigger:{ inserted(el,binging){ // console.log("自动触发事件") el.click() } } }, PS:下面看下vue 自动触发点击事件 需要,点击左边的列表出详情,但是都需要点击事件,页面进来时,默认触发点击事件 方法一,vue自定义指令 direc

随机推荐