vue自定义指令限制输入框输入值的步骤与完整代码


Posted in Javascript onAugust 30, 2020

需求

前端开发过程中,经常遇到表单校验的需求,比如校验用户输入框的内容,限制用户只能输入数字。

本文内容基于 element-ui,el-form 组件可以绑定 model、rule 用于表单内容校验,但如果有多个表单多个输入框那就得写很多个 rule,虽然方法可以通用可是使用起来也是比较繁琐的,可通过自定义执行实现一次注册,多次使用。

Vue 自定义指令

我们使用 el-input 作为表单的输入框

1. 先注册一个自定义指令

import Vue from 'vue';

Vue.directive('LimitInputNumber', {
 bind(el) {
 # do something
 },
});

2.使用自定义指令

直接在组件内绑定 v-limit-input-number 指令

<el-input v-limit-input-number />

3.指令内部校验

onkeypress 事件

onkeypress 事件会在键盘按键被按下并释放一个键时发生

可在事件触发时检测若输入的值不为数字,直接返回 fales

Vue.directive('LimitInputNumber', {
 bind(el) {
 el.onkeypress = (event) => {
  return (/[\d]/.test(String.fromCharCode(event.keyCode || event.which))) || event.which === 8;
 };
 },
});

但该事件存在一个问题,就是在中文输入法的时候无法触发事件,导致用户可以输入中文

vue自定义指令限制输入框输入值的步骤与完整代码

oninput 事件

oninput 事件在用户输入时触发

可在事件触发时进行过滤,过滤掉那些不为数字的值,并重新绑定到输入框上,解决了中文输入法下的问题

Vue.directive('LimitInputNumber', {
 bind(el) {
  el.oninput = () => {
   el.children[0].value = el.children[0].value.replace(/\D/ig, '');
  };
 },
});

vue自定义指令限制输入框输入值的步骤与完整代码

完整代码

import Vue from 'vue';

Vue.directive('LimitInputNumber', {
 bind(el) {
  el.onkeypress = (event) => {
   return (/[\d]/.test(String.fromCharCode(event.keyCode || event.which))) || event.which === 8;
  };
  el.oninput = () => {
   el.children[0].value = el.children[0].value.replace(/\D/ig, '');
  };
 },
});

总结

到此这篇关于vue自定义指令限制输入框输入值的文章就介绍到这了,更多相关vue自定义指令限制输入框输入值内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
获取body标签的两种方法
Oct 13 Javascript
jquery为页面增加快捷键示例
Jan 31 Javascript
jQuery中ajax的load()方法用法实例
Dec 26 Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 Javascript
jQuery实现日期联动效果实例
Jul 26 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
微信小程序 网络API 上传、下载详解
Nov 09 Javascript
jQuery动态生成表格及右键菜单功能示例
Jan 13 Javascript
微信小程序 http请求的session管理
Jun 07 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
Javascript中parseInt的正确使用方式
Oct 17 Javascript
详解Howler.js Web音频播放终极解决方案
Aug 23 Javascript
JS性能优化实现方法及优点进行
Aug 30 #Javascript
如何检测JavaScript中的死循环示例详解
Aug 30 #Javascript
JavaScript中CreateTextFile函数
Aug 30 #Javascript
详解vue组件之间的通信
Aug 30 #Javascript
如何阻止移动端浏览器点击图片浏览
Aug 29 #Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 #Javascript
JS如何判断对象是否包含某个属性
Aug 29 #Javascript
You might like
PHP5/ZendEngine2的改进
2006/10/09 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
js输出列表实现代码
2010/09/12 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
python实现将文本转换成语音的方法
2015/05/28 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
python 动态绘制爱心的示例
2020/09/27 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
公司JAVA开发面试题
2015/04/02 面试题
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
JSF的标签库有哪些
2012/04/27 面试题
煤矿安全承诺书
2014/05/22 职场文书
培训师岗位职责
2015/02/14 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
寻找成龙观后感
2015/06/12 职场文书
同事欢送会致辞
2015/07/31 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android