input获取焦点vue_在vue项目中引用element-ui时 让el-input 获取焦点的方法

在制作项目的时候遇到一个需求,点击一个按钮弹出一个input输入框,并让输入框获得焦点,项目中引用了ElementUI

在网上查找了很多方法,

但是在实际使用中发现了一个问题

无论是使用$ref获取input元素然后使用focus方法

还是使用饿了么组件自带的autoFocus

都只有在第一次点击按钮的时候可以让Input获得焦点,在不刷新页面的情况下,第二次以后的按钮点击都不会让Input获得焦点。我到现在也没有搞明白这是为什么,猜测了一下是存才一个全局变量,当我们第一次使Input获得焦点以后改变了这个预设变量的值,在Input失去焦点的时候并没有将这个值重置,所以导致了后面的问题。

废话不多说,

下面是当同时使用Vue和el-input的时候的解决方案。

Vue本身提供了自定义指令的方法

// 注册一个全局自定义指令 `v-focus`

Vue.directive('focus', function (el) {

el.focus()

})

这样使我们在组件中可以自用的调用v-focus方法,给他绑定定义布尔变量来控制元素是否获得焦点

但是这里要注意的是组件本身在页面中渲染成了一个div元素

所以我们要在被绑定为v-focus的同时

在自定义指令中获取组件下通过querySelector()方法获取input元素

<el-input

v-model.trim="searchFor"

@blur="blurSearchFor"

v-focus="blurFocus">

</el-input>

Vue.directive('focus', function (el) {

el.querySelector('input').focus()

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值