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 相关文章推荐
摘自百度的图片轮换效果代码
Nov 19 Javascript
用于判断用户注册时,密码强度的JS代码
Jan 01 Javascript
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
May 06 Javascript
原生js的弹出层且其内的窗口居中
May 14 Javascript
setinterval()与clearInterval()JS函数的调用方法
Jan 21 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
JavaScript中创建原子的方法总结
Aug 26 Javascript
使用Angular material主题定义自己的组件库的配色体系
Sep 04 Javascript
Node.js API详解之 module模块用法实例分析
May 13 Javascript
vue 中使用print.js导出pdf操作
Nov 13 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
Python查看微信撤回消息代码
2018/06/07 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python切割图片的示例
2020/11/12 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
会计专业自我鉴定范文
2013/10/06 职场文书
什么是岗位职责
2013/11/12 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
网络管理专业求职信
2014/03/15 职场文书
关于诚信的活动方案
2014/08/18 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
python代码实现扫码关注公众号登录的实战
2021/11/01 Python