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 相关文章推荐
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 Javascript
jQuery产品间断向下滚动效果核心代码
May 08 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
Aug 18 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
angular或者js怎么确定选中ul中的哪几个li
Aug 16 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
JS实现打砖块游戏
Feb 14 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 28 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 24 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
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
Python中类型关系和继承关系实例详解
2015/05/25 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
浅谈python对象数据的读写权限
2016/09/12 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Python requests获取网页常用方法解析
2020/02/20 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
通过代码实例了解Python异常本质
2020/09/16 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
好人好事事迹材料
2014/02/12 职场文书
党员违纪检讨书
2014/02/18 职场文书
2014年质检员工作总结
2014/11/18 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
文员岗位职责范本
2015/04/16 职场文书
严以用权学习心得体会
2016/01/12 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Vue Element plus使用方法梳理
2022/12/24 Vue.js