vue input标签通用指令校验的实现


Posted in Javascript onNovember 05, 2019

移动端通常对于input标签要求输入有一些校验,vue的指令可达到完美校验的作用

预期效果

<input v-model="times" :data-last_value="lastTimes" v-int v-max="8" v-min="2" />

属性data-last_value的值用来缓存用户输入框上一次失去焦点后输入的值,lastTimes是初始化的变量,后续不会再随意更改此值, v-model一定不要和data-last_value绑定同一个变量, 因为这样就起不到记住用户上一次输入值,并利用该值在校验不通过的情况下使用它

指令实现

以下3个指令可完全独立使用

校验整数

const util = {
  isNumber(str) {
    const num = Number(str);
    return Math.floor(num) === num;
  }
 };
 directives: {
  int: {
   inserted: (el) => {
    let oldListener = el.onblur;
    el.onblur = (e) => {
     if (oldListener) {
      oldListener(e);
     }
     const blurValue = Number(el.value);
     // 用data-last_value属性值缓存上一次的值,以便恢复
     const lastValue = el.getAttribute('data-last_value');
     if (!util.isNumber(blurValue)) {
      util.toast('请输入数字');
      el.value = lastValue;
      el.dispatchEvent(new Event('input'));
     }
     if (el.value === lastValue) return;
     // 更新上一次的值
     el.setAttribute('data-last_value', el.value);
    }
   },
  },
 }

校验最小值

directives: {
  min: {
   inserted: (el, binding) => {
    const oldListener = el.onblur;
    el.onblur = (e) => {
     if (oldListener) {
      oldListener(e);
     }
     const blurValue = Number(el.value);
     const min = binding.value;
     if (blurValue < min) {
      // util.toast替换成自己业务的toast提示弹窗
      util.toast(`最小值不能小于${min}`);
      el.value = min;
      el.dispatchEvent(new Event('input'));
     }
     const lastValue = el.getAttribute('data-last_value');
     if (el.value === lastValue) return;
     // 更新上一次的值
     el.setAttribute('data-last_value', el.value);
    }
   },
  },
 }

校验最大值

directives: {
  max: {
   // 指令的定义
   inserted: (el, binding) => {
    const oldListener = el.onblur;
    el.onblur = (e) => {
     if (oldListener) {
      oldListener(e);
     }
     const blurValue = Number(el.value);
     const max = binding.value;
     if (blurValue > max) {
      util.toast(`最大值不能大于${max}`);
      el.value = max;
      el.dispatchEvent(new Event('input'));
     }
     const lastValue = el.getAttribute('data-last_value');
     if (el.value === lastValue) return;
     // 更新上一次的值
     el.setAttribute('data-last_value', el.value);
    }
   },
  },
 }

小小的校验指令没想到里面还有那么多细节~~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
新浪微博字数统计 textarea字数统计实现代码
Aug 28 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
jquery实现在光标位置插入内容的方法
Feb 05 Javascript
jQuery简单实现验证邮箱格式
Jul 15 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
js学习之----深入理解闭包
Nov 21 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
Angular父组件调用子组件的方法
Apr 02 Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 Javascript
基于openlayers实现角度测量功能
Sep 28 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 #Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 #Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
Nov 05 #Javascript
vue Tab切换以及缓存页面处理的几种方式
Nov 05 #Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 #Javascript
vue 解决路由只变化参数页面组件不更新问题
Nov 05 #Javascript
vue 实现路由跳转时更改页面title
Nov 05 #Javascript
You might like
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
php输出形式实例整理
2020/05/05 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
浅谈Python的垃圾回收机制
2016/12/17 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
Django 解决由save方法引发的错误
2020/05/21 Python
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
矫正人员思想汇报
2014/01/08 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
户外宣传策划方案
2014/05/25 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server