全局设置禁止输入特殊字符的简单方法-自定义指令

引自:vue自定义指令---输入框禁止输入特殊字符__nicedays的博客-CSDN博客

1.新建文件

2.写公共js

在引用原作者内容时遇到了输入中文异常的情况,所以做了改进

异常:
在输入中文时,对应的拼音也会填写到输入框中

分析:
中文状态下字母的输入也触发keyup事件,导致input输入框的值发生了改变
解决方案:
在中文输入时,input的输入框会触发compositionstart事件,选词结束后,触发compositionend事件。因此,忽略两个事件中间的输入即可。

import Vue from 'vue'
Vue.directive('emoji', {
  bind: function (el, binding, vnode) {
    // 自定义正则表达式
    var regRule = /[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g
    var inputFlag = true;
    el.$handle = function () {
      if(inputFlag){
        let val = el.value
        el.value = val.replaceAll(regRule, '')

        trigger(el, 'input')
      }

    }
    el.addEventListener('compositionstart', function(){
      inputFlag = false;
    });
    el.addEventListener('compositionend', function(){
      inputFlag = true;
    });

    el.addEventListener('keyup', el.$handle)
  },
  unbind: function (el) {
    el.removeEventListener('keyup', el.$handle)
  },
});
const trigger = (el, type) => {
  let ev = document.createEvent('HTMLEvents');//创建HTML事件
  ev.initEvent(type,true,true);//初始化事件,type为事件类型,如input
  el.dispatchEvent(ev);//派发事件
}
let findEle = (parent, type) => {
  return parent.tagName.toLowerCase() === type ? parent : parent.querySelector(type)
}

这里注意,不仅仅要修改值而已,还要触发它绑定的对应事件,否则不会触发双向绑定

写完了在main.js中引入试试

然后就可以在全局页面中使用了

这样就输入非法值以后也会触发双向绑定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值