当前位置:   article > 正文

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

js 禁止输入框特殊符号

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

1.新建文件

2.写公共js

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

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

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

  1. import Vue from 'vue'
  2. Vue.directive('emoji', {
  3. bind: function (el, binding, vnode) {
  4. // 自定义正则表达式
  5. var regRule = /[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g
  6. var inputFlag = true;
  7. el.$handle = function () {
  8. if(inputFlag){
  9. let val = el.value
  10. el.value = val.replaceAll(regRule, '')
  11. trigger(el, 'input')
  12. }
  13. }
  14. el.addEventListener('compositionstart', function(){
  15. inputFlag = false;
  16. });
  17. el.addEventListener('compositionend', function(){
  18. inputFlag = true;
  19. });
  20. el.addEventListener('keyup', el.$handle)
  21. },
  22. unbind: function (el) {
  23. el.removeEventListener('keyup', el.$handle)
  24. },
  25. });
  26. const trigger = (el, type) => {
  27. let ev = document.createEvent('HTMLEvents');//创建HTML事件
  28. ev.initEvent(type,true,true);//初始化事件,type为事件类型,如input
  29. el.dispatchEvent(ev);//派发事件
  30. }
  31. let findEle = (parent, type) => {
  32. return parent.tagName.toLowerCase() === type ? parent : parent.querySelector(type)
  33. }

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/56924
推荐阅读
相关标签
  

闽ICP备14008679号