解决在vue中使用elementUI自定义校验及点击提交不生效问题

news2024/11/24 8:53:51

前言:

        本章讲述的主要是对身份证号码的校验为何校验了但提交不生效问题

拓展小知识:

🍀 1、身份证号码(二代18位身份证)的含义

1️⃣ 1-2位:代表所属省级政府的代码;
2️⃣ 3-4位:代表所在的地、市级政府代码;
3️⃣ 5-6位:代表所在区、县级政府代码;
4️⃣ 7-10位:代表身份证持有人的出生年份;
5️⃣ 11-12位:代表身份证持有人的出生月份;
6️⃣ 13-14位:代表身份证持有人的出生当月日期;
7️⃣ 15-16位:代表身份证持有人在当地的顺序码(所在地的派出所的代码);
8️⃣ 17位:代表性别,奇数表示男性,偶数表示女性;

9️⃣ 18位:代表校验码(校检码可以是0~9的数字,有时也用X表示)。

📝  X是罗马数字的10,用X来代替10,可以保证公民身份证符合国家标准。

🍀 2、一代身份证和二代身份证的区别:
1️⃣ 编号位数不同,第一代身份证为15位号码,而第二代证是18位号码。
2️⃣ 编码规则不同,第一代身份证在前6位号码后没有完整出生年份,而二代的有完整的出生年份。
3️⃣ 芯片存储量不同,二代身份证采用非接触式芯片,写入的信息可划分安全等级,分区存储,容量更大。
4️⃣ 二代增加了有效的防伪标识,将持证人的照片图像和身份项目内容等数字化后采用密码技术加密,存入芯片,可以有效起到证件防伪的作用。


  目录:

 一、身份证号码的校验

      📘   1、在vue文件中,写好关于身份证的input输入框(且要设定输入长度限制)

注意:开启属性show-word-limit可以显示字数统计,配合 maxlength 属性来限制输入长度

<el-dialog title="业主变更" :visible.sync="inLeaseVisible">
  <el-form :rules="rulesY" ref="rulesTower" :model="inLeaseForm" label-width="120px" size="small">
    <el-row>
      <el-col :span="12">
         <el-form-item label="业主姓名" prop='name'>
           <el-input v-model="inLeaseForm.name"/>
         </el-form-item>
      </el-col>
      <el-col :span="12">
         <el-form-item label="联系电话" prop='phone'>
           <el-input v-model="inLeaseForm.phone" maxlength="11" show-word-limit clearable/>
         </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="身份证" prop='idCard'>
          <el-input v-model="inLeaseForm.idCard" maxlength="18" show-word-limit/>
        </el-form-item>
      </el-col>
      <el-col :span="24" style="text-align: right;">
         <el-button type="primary" size="small" @click="inLeaseSubmit">确认变更</el-button>
      </el-col>
    </el-row>
  </el-form>
</el-dialog>

🍉   :visible.sync="inLeaseVisible" —— visible代表可见的,当vue中inLeaseVisible变量的值为true时,el-dialog修饰的内容(会话窗口或者文本信息)就会在页面中展示出来,反之是false时就会隐藏;sync 指的是同步动态双向来表示visible的值,当我关闭窗口时,弹框就隐藏了;

🍉   :rules = "rulesY" ——  动态绑定校验规则属性

🍉   ref = "rulesTower" ——  ref 是一个全局属性,可用来引用(标记) 指定元素或者组件,它是唯一的,可在当前组件内部通过 this.$refs 来访问,也可在当前组件外部通过 vm.$refs 来访问; ( 在Vue中,ref是一个用于访问组件或DOM元素的属性)

🍉  :model = "inLeaseForm" —— :model是v-bind:model的缩写,主要是用于数据双向绑定

🍉  prop='name' —— prop是父组件向子组件单向传递数据,该过程是单向的(单向数据流)

传递的属性可以是静态的/动态的/数字/字符串/数组/对象。

 在element官网中可以看到input输入框中的输入长度限制

      📕  2、新建一个自定义身份证验证的js文件,在js文件中写一个身份校验的方法,在需要身份校验的vue组件中引入这个js文件。

/* 身份证校验规则 lxy */
//校验身份证号
export function idCard(idCard) {  //传入的 idCard 参数为用户输入的身份证号
  //长度或格式校验
  var patrn = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/;
  //地区校验
  var aCity = {
    11: "北京",
    12: "天津",
    13: "河北",
    14: "山西",
    15: "内蒙古",
    21: "辽宁",
    22: "吉林",
    23: "黑龙江",
    31: "上海",
    32: "江苏",
    33: "浙江",
    34: "安徽",
    35: "福建",
    36: "江西",
    37: "山东",
    41: "河南",
    42: "湖北",
    43: "湖南",
    44: "广东",
    45: "广西",
    46: "海南",
    50: "重庆",
    51: "四川",
    52: "贵州",
    53: "云南",
    54: "西藏",
    61: "陕西",
    62: "甘肃",
    63: "青海",
    64: "宁夏",
    65: "新疆",
    71: "台湾",
    81: "香港",
    82: "澳门",
    91: "国外"
  };
  // 出生日期验证
  var sBirthday = (
    idCard.substr(6, 4) +
    "-" +
    Number(idCard.substr(10, 2)) +
    "-" +
    Number(idCard.substr(12, 2))
  ).replace(/-/g, "/"),
    d = new Date(sBirthday)
  // 身份证号码校验 最后4位  包括最后一位的数字/字母X
  var sum = 0,
    weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
    codes = "10X98765432";
  for (var i = 0; i < idCard.length - 1; i++) {
    sum += idCard[i] * weights[i];
  }
  //计算出来的最后一位身份证号码
  var last = codes[sum % 11]; 

  //错误信息校验
  var errorMsg = '';
  if (idCard === '') {
    errorMsg = "身份证号不能为空"
  } else if (!patrn.exec(idCard)) {
    errorMsg = "你输入的身份证长度或格式错误"
  } else if (!aCity[parseInt(idCard.substr(0, 2))]) {
    errorMsg = "你的身份证地区非法"
  } else if (sBirthday != d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate()) { errorMsg = "身份证上的出生日期非法" } else if (idCard[idCard.length - 1] != last) {
    errorMsg = "你输入的身份证号非法"
  }
  return errorMsg;
}

  📗  3、在你需要验证身份证的文件中 引入身份证验证的js文件 

//引入身份证验证的js文件
import {idCard} from "@/pages/room/validate.js";

 📔 4、在data中定义变量,接收校验结果

data() {
      //定义变量接收校验结果
      //自定义验证表单时,切记不管什么情况都要执行callback函数!!!
      var checkIdCard  = (rule, value, callback) => {
        var errorMsg = idCard(value);
        if (errorMsg != "") {
          callback(new Error(errorMsg));
        } else {
          callback();// 一定要每种情况都执行回调
        }
      }
};

📝  划重点:

❗ 重要的事情说三遍:切记一定要每一种情况都要执行回调 【即 callback()】!!!

                                切记一定要每一种情况都要执行回调 【即 callback()】!!!

                                切记一定要每一种情况都要执行回调 【即 callback()】!!!


📑  我自己是直接 if 判断是否为空之后就没有 else { callback(); } 判断另一种情况,所以当我校验提交按钮时一直触发不了,一直无效,后来才发现是这个问题。

 📙  5、在rulesY中设置验证规则,绑定需要校验的属性; checkIdCard 调用校验返回的结果

rulesY: {
   phone:[
      {
        required: true,
        message: '请输入手机号',
        trigger: 'blur'
      },{
         required: true,
         pattern: /^1[3456789]\d{9}$/,
         message: '手机号格式不正确',
         trigger: 'blur'
      }],
    //绑定需要校验的属性
    idCard:[
      //checkIdCard: 调用校验返回结果 //定义身份证校验规则变量
      { required: true, validator: checkIdCard, trigger: 'blur' }
    ]
},

  📚  6、将校验规则封装后,再调用方法进行校验 

      // 业主确认变更
      inLeaseSubmit() {
        this.$refs.rulesTower.validate((valid)=>{
          if(valid){
            //alert("success!");
            API.getRoomData('post', '/api/ctyLodgerInfo/hendersonGroup/adminIn', this.inLeaseForm).then(res => {
              if (res.data.code == 0) {
                this.inLeaseForm = {}
                this.inLeaseVisible = false
                this.$message.success(res.data.msg)
              } else {
                this.$message.warning(res.data.msg)
              }
            });
          } else {
            console.log("error!!!");
            return false;
          }
        });
     },

效果展示:


 二、 为何校验了但提交不生效问题

📝  划重点:

📖  总结以下几个问题:

🍏 1、在data中定义变量接收校验结果时,未执行回调;

     切记一定要每一种情况都要执行回调 【即 callback()】!!!

🍏 2、表单引用名称不正确。在表单上添加 ref 属性时,需确保名称和使用 this.$refs时的名称一致,不然无法获取到表单引用对象;

🍏 3、表单对象不存在 validate 方法 ;

🍏 4、绑定事件不正确。在表单组件上绑定提交事件时,需确保@click='xxx'事件已正确绑定到表单组件上,并使用了正确的方法名;

🍏 5、表单验证规则未设置。若没有为表单设置验证规则,则无法进行验证,而此时调用 validate 方法也会失效。需为表单设置 rules 属性,并设置相应的验证规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】原型和原型链

最近面试的时候&#xff0c;面试官有问到这个&#xff0c;答得很简单&#xff0c;感觉了解得不深&#xff0c;下来之后自己又搜索了一下动手看了看相关的内容。 a. 每个函数都有prototype属性&#xff0c;称之为原型&#xff1b;因为这个属性的值有时候是一个对象&#xff0c;…

2023-04-04 2016天梯赛决赛练习题L2

7-11 互评成绩 学生互评作业的简单规则是这样定的&#xff1a;每个人的作业会被k个同学评审&#xff0c;得到k个成绩。系统需要去掉一个最高分和一个最低分&#xff0c;将剩下的分数取平均&#xff0c;就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输…

JUC概述

1. JUC是什么&#xff1f; 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包&#xff0c;在此包中增加了在并发编程中很常用的工具类。此包包括了几个小的、已标准化的可扩展框架&#xff0c;并提供一些功能实用的类&#xff0c;没有这些类&#xff0c;一些功能会很难实现或…

【JavaEE】SpringBoot配置文件的设置及其读取

目录 配置文件作用 配置文件注意事项 properties 用法 修改字符集 优缺点 yml 用法 优缺点 读取配置文件 使用 Value注解 读properties配置文件 读yml配置文件 使用 ConfigurationProperties 注解 读properties配置文件 读yml配置文件 配置文件作用 SpringBoot的…

MCMC采样

MCMC采样 MCMC 是一种随机的近似推断&#xff0c;其核心就是基于采样的随机近似方法蒙特卡洛方法。而近似推断中又可以分成两大类&#xff0c;即为确定性近似 (VI) 和随机近似 (MCMC)。我们需要从概率分布中取 个点&#xff0c;从而近似计算这个积分。常用采样方法有&#xff…

开关柜绝缘状态检测与故障诊断

摘要:电力开关柜作为电力系统的关键设备广泛应用于输电配电网络&#xff0c;其运行可靠性直接影响着电力系统供电质量及安全性能。开关柜绝缘状态检测与故障诊断是及时维修、更换和预防绝缘故障的重要技术手段。在阐述开关柜绝缘状态评估的基础上&#xff0c;指出其内典型的局部…

Docker --- 基本操作、Dockerfile自定义镜像

一、Docker的基本操作 1.1、镜像操作 镜像名称 首先来看下镜像的名称组成&#xff1a; 镜名称一般分两部分组成&#xff1a;[repository]:[tag]。 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 如图&#xff1a; 这里的mysql就是repository&…

数据库课设--基于Python+MySQL的餐厅点餐系统(表的设计)

文章目录 一、系统需求分析二、系统设计1. 功能结构设计2、概念设计2.2.1 bill_food表E-R图2.2.2 bills表E-R图2.2.3 categories E-R图2.2.4 discounts表 E-R图2.2.5 emp表E-R图2.2.6 food 表E-R图2.2.7 member表E-R图2.2.8 member_point_bill表E-R图2.2.9 servers表E-R图2.2.1…

MySQL的事务原理和实现

一、事务属性与架构概述 1、基本概念&#xff1a; 事务&#xff08;Transaction&#xff09;是访问和更新数据库的程序执行单元&#xff1b;事务中可能包含一个或多个sql语句&#xff0c;这些语句要么都执行&#xff0c;要么都不执行。作为一个关系型数据库&#xff0c;MySQL…

为什么很多程序员不反感加班?行内人:老板给钱是真的给啊

为什么很多程序员不反感加班&#xff1f;行内人&#xff1a;说给钱老板真的给&#xff01; 一提到程序员&#xff0c;大部分人第一反应是加班多、996、脱发&#xff0c;这几乎成了外界对程序员刻板印象的标配。不少知名的互联网大厂也是加班之风盛行&#xff0c;譬如著名的华为…

Java版企业电子招投标采购系统源码之登录页面

信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、Stre…

Centos8编译安装内核

首先下载kernel&#xff0c;5.x版本的内核&#xff0c;下载地址&#xff1a; https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ 系统安装相关包&#xff1a; # yum install -y bc gcc make python3 ncurses-devel flex bison openssl-devel elfutils-libelf-devel将内…

南大通用数据库-Gbase-8a-学习-34-gcdump(导出数据库对象定义)

目录 一、测试环境 二、介绍 三、命令帮助 四、参数介绍 1、--print-defaults &#xff08;1&#xff09;含义 &#xff08;2&#xff09;例子 2、--connect_timeout &#xff08;1&#xff09;含义 &#xff08;2&#xff09;例子 3、-A, --all-databases &#xf…

软考初级考什么比较好?信息处理技术员怎么样?

软考初级信息处理技术员难度不大&#xff0c;零基础也是可以直接报考的&#xff0c;熟悉电脑&#xff0c;多练习就差不多了。 本考试设置的科目包括&#xff1a; &#xff08;1&#xff09;信息处理基础知识&#xff0c;考试时间为150分钟&#xff0c;笔试&#xff0c;选择题…

92、Nerfbusters: Removing Ghostly Artifacts from Casually Captured NeRFs

简介 主页:https://ethanweber.me/nerfbusters/ 在远离训练视图的新视图上渲染nerf可能会导致伪影&#xff0c;例如浮动或糟糕的几何形状。这些工件在野外捕获(a)中很普遍&#xff0c;但在NeRF基准测试中很少看到&#xff0c;因为评估视图通常从与训练视图相同的相机路径中选…

HTB_Under Construction—jwt伪造与sqlite注入

根据提示&#xff0c;此题目应该是代码审计类型的&#xff0c;文件结构如下 一般思路有两个&#xff0c;一是看有没有什么敏感信息&#xff0c;二就是看参数传递的地方能否利用&#xff0c;包括注入&#xff0c;伪造等 分析代码 index.js 先来分析入口文件&#xff0c;这是标…

零基础C/C++开发到底要学什么?

作者&#xff1a;黑马程序员 链接&#xff1a;https://www.zhihu.com/question/597037176/answer/2999707086 先和我一起看看&#xff0c;C/C学完了可以做什么&#xff1a; 软件工程师&#xff1a;负责设计、开发、测试和维护各类型的软件应用程序&#xff1b;游戏开发&#x…

【机智云物联网低功耗转接板】+模拟MCU快速上手

GE211是机智云自研的定制化转接板&#xff0c;使用 ESP32-C3-WROOM-02 通讯模块&#xff0c;适用于白色智能家电等设备应用。 转接板已经烧录了机智云连云的最新GAgent固件&#xff0c;所以不需要烧写任何软件就可以快速上手使用。 GE211板卡带有一个串口&#xff0c;一般是把这…

YOLOv1代码复现2:数据加载器构建

YOLOv1代码复现2&#xff1a;数据加载器构建 前言 ​ 在经历了Faster-RCNN代码解读的摧残后&#xff0c;下决心要搞点简单的&#xff0c;于是便有了本系列的博客。如果你苦于没有博客详细告诉你如何自己去实现YOLOv1&#xff0c;那么可以看看本系列的博客&#xff0c;也许可以帮…

同步辐射X射线断层扫描成像在各行业的应用

同步辐射X射线断层扫描成像在各行业的应用 同步辐射X射线断层扫描成像&#xff08;synchrotron radiation X-ray computed tomography&#xff0c;SRCT&#xff09;是一种非侵入式、高分辨率的成像技术&#xff0c;利用同步辐射光束产生的高强度、高亮度、单色性和相干性的X射线…