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 相关文章推荐
js form 验证函数 当前比较流行的错误提示
Jun 23 Javascript
IE之动态添加DOM节点触发window.resize事件
Jul 27 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
js ajaxfileupload.js上传报错的解决方法
May 05 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
jQuery+Ajax实现用户名重名实时检测
Jun 01 jQuery
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
Mar 13 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
基于Vue插入视频的2种方法小结
Apr 02 Javascript
layUI的验证码功能及校验实例
Oct 25 Javascript
Vue和Flask通信的实现
May 19 Vue.js
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使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python3计算三角形的面积代码
2017/12/18 Python
python实现二维插值的三维显示
2018/12/17 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
python分数表示方式和写法
2019/06/26 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
迟到检讨书500字
2014/02/05 职场文书
解除劳动合同协议书
2014/04/14 职场文书
生态养殖创业计划书
2014/05/06 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
推广普通话主题班会
2015/08/17 职场文书
远程教育学习心得体会
2016/01/23 职场文书