赞
踩
引自: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中引入试试

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

这样就输入非法值以后也会触发双向绑定
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。