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 相关文章推荐
jscript之List Excel Color Values
Jun 13 Javascript
jQuery 入门讲解1
Apr 15 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
Oct 26 Javascript
动态的绑定事件addEventListener方法的使用
Jan 24 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
详解vue mixins和extends的巧妙用法
Dec 20 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
Sep 12 Javascript
如何为vue的项目添加单元测试
Dec 19 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
JS实现瀑布流效果
Mar 07 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
php计算当前程序执行时间示例
2014/04/24 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
jquery禁用右键示例
2014/04/28 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Python while循环使用else语句代码实例
2020/02/07 Python
django model通过字典更新数据实例
2020/04/01 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
心理健康教育心得体会
2013/12/29 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
我爱我家教学反思
2014/05/01 职场文书
前台接待岗位职责
2015/02/03 职场文书
2015高考寄语集锦
2015/02/27 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
python基础之模块的导入
2021/10/24 Python
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL