vue 自定义指令 focus input框自动对焦

目的: 除非一些特定操作,否则始终聚焦指定的input框
组件:clickoutside.js

const clickoutsideContext = '@@clickoutsideContext'
export default {
  bind(el, binding, vnode) {
    const documentHandler = (e) => {
      if (vnode.context && !el.contains(e.target)) {
        vnode.context[el[clickoutsideContext].methodName]()
      }
    }
    el[clickoutsideContext] = {
      documentHandler,
      methodName: binding.expression,
      arg: binding.arg || 'click'
    }
    document.addEventListener(el[clickoutsideContext].arg, documentHandler)
  },

  update(el, binding) {
    el[clickoutsideContext].methodName = binding.expression
  },

  unbind(el) {
    document.removeEventListener(
      el[clickoutsideContext].arg,
      el[clickoutsideContext].documentHandler)
  },

  install(Vue) {
    Vue.directive('clickoutside', {
      bind: this.bind,
      unbind: this.unbind
    })
  }
}

页面引入:

import clickoutside from '../../utils/clickoutside.js'

注册:跟data并列

directives: {
    clickoutside
  }

html:

<el-input
ref="inputFocus"
style="position:absolute;left:-99999px;"
:autofocus="true"
v-model.lazy="QRCodeNumber"
type="text"
@change="preparePay" 
v-clickoutside='hiddenSomething' />

方法:

hiddenSomething () {
  // 点击这个元素之外的元素之执行此方法
  // eg: 假如需要弹出框进行另外的input输入事件,则在需要满足条件失焦时执行blur事件(如下),但是在执行完毕失焦后,需要手动开启自动对焦(关闭弹框后执行this.$refs.inputFocus.focus(),如下面方法videoPlayBackShow())
  // if (this.humanSettlementVisible.show) {
  //      this.$refs.inputFocus.blur()
  //    } else {
  //		this.$refs.inputFocus.focus()
  // }
}
// 关闭视频回放弹框
//    videoPlayBackShow () {
//      this.$refs.inputFocus.focus()
//    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值