vue中使用指令限制input输入

在项目中限制输入框的输入字符是一个很常见的场景。
常见做法如下:
1.监听@input事件在方法中处理
2.封装input组件在组件中处理
如下是监听@input事件的方法
<input
type=“text”
placeholder=“备注信息”
class=“order_input”
v-model=“review_note”
maxlength=“15”
@input=“vaidateEmoji”
/>

        methods:{
        vaidateEmoji () {
      var regRule = /[^\u4E00-\u9FA5|\d|\a-zA-Z|\r\n\s,.?!,。?!…—&$=()-+/*{}[\]]|\s/g
      this.review_note = this.review_note.replace(regRule, '')
    },
        }

当我们要限制的组件很多的时候就需要在每个组件页面些vaidateEmoji方法。
以上两种方法都不太便利。。。
考虑到vue指令的便利性。尝试用指令来做限制输入,代码如下:

import Vue from 'vue'

let findEle = (parent, type) => {
  return parent.tagName.toLowerCase() === type
    ? parent
    : parent.querySelector(type)
}

const trigger = (el, type) => {
  const e = document.createEvent('HTMLEvents')
  e.initEvent(type, true, true)
  el.dispatchEvent(e)
}
Vue.directive('noEmoji', {
  bind: function (el, binding, vnode) {
    var regRule = /[^\u4E00-\u9FA5|\d|\a-zA-Z|\r\n\s,.?!,。?!…—&$=()-+/*{}[\]]|\s/g
    let $inp = findEle(el, 'input')
    el.$inp = $inp
    $inp.handle = function () {
      let val = $inp.value
      $inp.value = val.replace(regRule, '')

      trigger($inp, 'input')
    }
    $inp.addEventListener('keyup', $inp.handle)
  },
  unbind: function (el) {
    el.$inp.removeEventListener('keyup', el.$inp.handle)
  }
})

以上封装了限制输入表情等非法字符的指令。
在main.js中引入即可将指令注册。
然后组件上指定指令 v-no-emoji即可

<input
          type="text"
          placeholder="备注信息"
          class="order_input"
          v-model="review_note"
          maxlength="15"
          v-no-emoji
        />

以上完成了指令对输入框的限制输入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值