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 相关文章推荐
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
Mar 18 Javascript
angularJS 中$scope方法使用指南
Feb 09 Javascript
Bootstrap基础学习
Jun 16 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
Oct 25 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
Jun 20 Javascript
vue2 前端搜索实现示例
Feb 26 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 Javascript
小程序最新获取用户昵称和头像的方法总结
Sep 23 Javascript
微信小程序拖拽排序列表的示例代码
Jul 08 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 404错误页面实现代码
2009/06/22 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
node.js中的console用法总结
2014/12/15 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
python实现Decorator模式实例代码
2018/02/09 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
计划生育宣传标语
2014/06/21 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
绿色小区申报材料
2014/08/22 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
营运督导岗位职责
2015/04/10 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript