表单验证的简单实现

news2024/11/19 1:45:12

表单验证

    • 一. 作用
    • 二. 需求
    • 三. 实现
      • 需求一:
        • HTML:
        • JavaScript:
      • 需求二:
        • JavaScript:

一. 作用

如果没有表单验证,错误的数据就会发往服务端,会造成服务端压力过大;
所以在前端对数据进行过滤,以减轻服务端压力;

二. 需求

1. 当输入框失去焦点时,验证输入内容是否符合要求-----onblur
当用户名符合要求后,要隐藏提示信息!(display=”none”)

2. 点击注册按钮时,判断所有输入框的内容是否符合要求,如果不符合则阻住表单提交–onsubmit

三. 实现

需求一:

在这里插入图片描述

HTML:

  1. action=# 即提交到当前页面,表单提交的方式是 get;
  2. style="display:none" 会隐藏提示信息,所以当用户名密码不符合要求时,只需要修改 display属性即可让提示信息分情况显示;
	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>注册页面</title>
	</head>
	
	<!-- css添加背景图片-->
	  <style>
	    body{
	      background-image: url("3.jpg");
	      background-repeat:no-repeat;
	    }
	  </style>
	
	
	
	<body>
	<h2>
	  欢迎注册!
	</h2>
	
	<!--表单-->
	<form id="reg-from" action="#" method="get">
	  <table>
	    <tr>
	      <td class="inputs">用户名:</td>
	      <td>
	        <input name="username" type="text" id="username">
	        <br>
	        <!-- 错误提示信息      -->
	        <span id="username_err" class="err_msg" style="display:none">用户名不合法</span>
	        <!-- 未来通过更改span的display属性来控制提示信息   -->
	      </td>
	    </tr>
	
	
	    <tr>
	      <td>密码:</td>
	      <td class="inputs">
	        <input name="password" type="password" id="password">
	        <br>
	        <!-- 错误提示信息      -->
	        <span id="password_err" class="err_msg" style="display:none">密码不合法</span>
	      </td>
	    </tr>
	  </table>

	  <br>
	  <input type="submit" name="submit" value="提交注册">
	</form>
	
	<!-- 外连script!   -->
	<script src="testing.js"></script>
	
	</body>
	</html>

注意:
外连script 要放在后面,否则无法提前获取到Element对象,就无法更改display属性;

JavaScript:

1.主要思路就是根据id 获取到Element对象,
2.然后使用对象的 onblur 事件 绑定 函数,
3.在函数内进行判断,并更改Element对象的display属性;


// 1.验证用户名是否合理
// 1.1 根据id 获取用户名的输入框的Element对象
    var username=document.getElementById("username");
// 1.2 绑定Element对象的onblur属性! 设置鼠标失去焦点时 要发生的事件
    username.onblur=function(){
// 1.3 获取用户的输入名(Element对象的value属性)
        let usernameInput=username.value.trim();  //去掉空格
// 1.4 判断用户名是否是6~12位
        if(usernameInput.length>=6 && usernameInput.length<=12){
            // 用户更改username后,符合规则时将display属性置为null
            document.getElementById("username_err").style.display="none";
        }else{
            //不符合则修改 span标签中的style="display"属性为空字符串即可显示提示信息!
            document.getElementById("username_err").style.display='';
        }
    }

// 使用 Ctrl+r 替换username为password
// 2.验证密码是否合理
//2.1 根据id 获取密码的输入框对象
    var passwordObj=document.getElementById("password");
// 2.2 绑定对象的onblur属性! 设置鼠标失去焦点时 要发生的事件
    passwordObj.onblur=function(){
// 2.3 获取用户的输入密码
        var passwordInput=passwordObj.value.trim();// input中value就是用户的输入,trim()去掉空格
// 2.4 判断密码是否是6~12位
        if(passwordInput.length>=6 && passwordInput.length<=12){
            //password,符合规则时将display属性置为null
           document.getElementById("password_err").style.display="none";
        }else{
            //不符合,则修改 span标签中的style="display"属性为空字符串即可显示 !
           document.getElementById("password_err").style.display="";
        }

运行效果:
在这里插入图片描述

在这里插入图片描述

需求二:

在这里插入图片描述

函数的逻辑是:
用户名和密码同时满足则返回true 即可以提交,否则返回false 不能提交信息到服务端!

需要改造需求一中的方法,将匿名函数改为单独的函数,并在表单验证时调用;

JavaScript:

更改用户名和密码部分:

// 1.验证用户名是否合理
// 1.1 根据id 获取用户名的输入框对象
    var usernameObj=document.getElementById("username");
// 1.2 绑定对象的onblur属性! 设置鼠标失去焦点时 要发生的事件
    usernameObj.onblur=checkUsername;
    // js函数名是一个引用,不加小括号相当于属性赋给引用,不会立即调用
    function checkUsername(){
    //  获取用户的输入名
        let usernameInput=usernameObj.value.trim();// input中value就是用户的输入,trim()去掉空格
        //判断 是否是6~12位
        //提出判断的结果为一个变量flag
        let flag=usernameInput.length>=6 && usernameInput.length<=12;
        if(flag){
            // 符合
            // 如果后续更改为符合要求的用户名,则要隐藏提示信息!
           document.getElementById("username_err").style.display="none";
        }else{
            //不符合,则修改 span标签中的style="display"属性为空字符串即可显示 !
           document.getElementById("username_err").style.display="";
        }
        return flag; // 返回值便于给onsubmit使用
    }

// 使用 Ctrl+r 替换username为password
// 2.验证密码是否合理
//2.1 根据id 获取密码的输入框对象
    var passwordObj=document.getElementById("password");
// 2.2 绑定对象的onblur属性! 设置鼠标失去焦点时 要发生的事件
    passwordObj.onblur=checkPassword;
    function checkPassword(){
    //  获取用户的输入密码
        let passwordInput=passwordObj.value.trim();// input中value就是用户的输入,trim()去掉空格
        //判断 是否是6~12位
        let flag=passwordInput.length>=6 && passwordInput.length<=12;
        if(flag){
            // 符合
            // 如果后续更改为符合要求的密码,则要隐藏提示信息!
           document.getElementById("password_err").style.display="none";
        }else{
            //不符合,则修改 span标签中的style="display"属性为空字符串即可显示 !
           document.getElementById("password_err").style.display="";
        }
        return flag;
    }

表单验证!

// 表单验证
// 1.获取form表单的对象,而不是 submit的对象!
    var regFormObj=document.getElementById("reg-form");
// 2.绑定对象的onsubmit属性,返回false则阻止提交
    regFormObj.onsubmit=function(){
    // 逐个判断表单项是否符合要求,有一个不符合则返回false
    // 让之前单独判断用户名/密码的 funtion可以被调用,且有返回值
    let flag=checkUsername() && checkPassword();
    if(!flag){
        alert("无法提交,请修改");
    }
    // 都满足则返回给unsubmit为true; 有一个不满足就返回false
    return flag;
}

运行效果:
如果用户名和密码任一不满足要求将无法提交:
在这里插入图片描述
更改后,用户名密码随着url被提交(method=get):
在这里插入图片描述

注意:

  1. 要绑定onsubmit对象,要获取的是整个form 表单的Element对象,而不是 submit的对象!
  2. 方法后面不加括号 是函数对象,加()是函数结果!

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

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

相关文章

ArcGIS基础实验操作100例--实验98计算上游集水区污染值

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验98 计算上游集水区污染值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

【阶段三】Python机器学习28篇:机器学习项目实战:KMeans算法的基本原理与KMeans聚类分群模型

本篇的思维导图: KMeans模型 KMeans算法的基本原理 KMeans算法名称中的K代表类别数量,Means代表每个类别内样本的均值,所以KMeans算法又称为K-均值算法。KMeans算法以距离作为样本间相似度的度量标准,将距离相近的样本分配至同一个类别。样本间距离的计算方式可以是…

QListWidget 自定义 item的图标和文字的位置

目录前言思路一思路二思路二缺陷思路三思路四前言 楼主并没有完整的解决这个问题&#xff0c;如果你是着急寻找解决方案的就可以划走了&#xff0c;如果你对楼主的解决思路有兴趣&#xff0c;那么可以继续向下阅读。首先需求是可以控制QListWidgetItem的icon和text x轴的位置&…

【树】树、二叉树的基础知识

树定义&#xff1a;树是n&#xff08;n≥0&#xff09;个结点的有限集合T。当n0时&#xff0c;称为空树&#xff1b;当n>0时&#xff0c;该集合满足如下条件&#xff1a; (1) 其中必有一个称为根&#xff08;root&#xff09;的特定结点&#xff0c;它没有直接前驱&#xff…

基于javaweb jsp+servlet学生宿舍管理系统

基于javaweb jspservlet学生宿舍管理系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 …

Mysql入门技能树-时间日期函数(一)-练习篇

DAY Joe 需要从日期中提取当天是几号&#xff0c;下列哪些函数可以实现这个功能&#xff1f; 1.DAY 2.DAYOFMONTH 3.DAYOFYEAR 4.TO_DAYS 答案是&#xff1a;C SELECT DAY(2023-02-14)SELECT DAYOFMONTH(2023-02-14)结果都是14 -- 返回 d 是一年中的第几天&#xff0c;范围…

【学习笔记】【Pytorch】九、非线性激活

【学习笔记】【Pytorch】九、非线性激活学习地址主要内容一、前言二、Pytorch的非线性激活三、nn.ReLU类的使用1.使用说明2.代码实现二、nn.Sigmoid类的使用1.使用说明2.代码实现学习地址 PyTorch深度学习快速入门教程【小土堆】. 主要内容 一、前言 我们知道人类大脑中的神…

【RabbitMQ】基础篇,学习纪录+笔记

目录 一.介绍 1.1MQ概述 1.2MQ优势和劣势 1.3常见的 MQ 产品 1.4RabbitMQ简介 1.5RabbitMQ中的相关概念 1.6RabbitMQ的安装 二.快速入门 2.1入门程序 2.2工作模式 2.2.1Work queues 工作队列模式 2.2.2Pub/Sub 订阅模式 2.2.3Routing 路由模式 2.2.4Topics 通配符…

vite 4.0 来了,带你手撕 create-vite 源码

通过本文你将了解到以下内容&#xff1a; 1&#xff0c;npm create 具体执行流程2&#xff0c;minimist、prompts、kolorist三个库3&#xff0c;create-vite 的源码分析 vite源码下载&#xff1a; //复制一份vite源码到自己的本地 git clone https://github.com/vitejs/vit…

抗击洪涝灾害,河道水雨情动态在线监测解决方案

一、项目背景我国是个多山的国家且位于东南季风区&#xff0c;降雨分布广泛还分布不均匀&#xff0c;这样一来使汛期高度集中。导致很多沿海城市以及临近河道的地区面临着河道决堤的威胁如何实时监测河道雨水情动态成了让人头疼的问题。在2022年1月&#xff0c;发改委、水利部在…

基于jsp+mysql+Spring的SpringBoot招聘网站项目(完整源码+sql)

基于jspmysqlSpring的SpringBoot招聘网站项目&#xff08;完整源码sql&#xff09;主要实现了管理员登录,简历管理,问答管理,职位管理,用户管理,职位申请进度更新,查看简历 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀…

Exchanges

文章目录ExchangesExchanges的类型FanoutDirectTopicExchanges &#xff08;交换机&#xff09;RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。 Exchanges的类型 直接(direct)&#xff0c;主题(topic),标题(headers)&#xff0c;扇出(fanout)&…

硅烷聚乙二醇硅烷,Silane-PEG-Silane同官能团科研试剂,化学结构式

产品名称&#xff1a;硅烷聚乙二醇硅烷&#xff0c;双硅烷聚乙二醇 中文别名&#xff1a;硅烷PEG硅烷&#xff0c;双硅烷聚乙二醇 英文名称&#xff1a;Silane-PEG-Silane 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k…

面对一堆烂代码,重构,还是重新开发?

hello&#xff0c;大家好&#xff0c;我是张张&#xff0c;「架构精进之路」公号作者。 1、烂代码的形成 写烂代码很容易&#xff0c;但代码写成一坨屎&#xff0c;还能正常运行&#xff0c;那就要有点水平才行。 尤其是一些经验不足的新手&#xff0c;根本不在乎代码质量的重要…

小年 —— 送日历福利啦!(acwing)

acwing每日一题集日历除夕夜瓜分10000ac币啦&#xff01; 手慢就没了┗|&#xff40;O′|┛ 嗷~~ 上次在acwing上面留言送日历&#xff0c;结果送着送着&#xff0c;连老本都给送没了&#xff0c;这波集齐了把其他的也给发出来了 AcWing【集日历瓜分10000AC币活动】赠送1月日历…

基于Java SSM springboot健身管理系统设计和实现

基于Java SSM springboot健身管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

Uniswap v3 详解(四):交易手续费

以普通用户的视角来看&#xff0c;对比 Uniswap v2&#xff0c;Uniswap v3 在手续费方面做了如下改动&#xff1a; 添加流动性时&#xff0c;手续费可以有 3个级别供选择&#xff1a;0.05%, 0.3% 和 1%&#xff0c;未来可以通过治理加入更多可选的手续费率Uniswap v2 中手续费…

《啊哈算法》第三章--枚举很暴力

从无到有学算法&#xff08;看漫画学算法&#xff09; (๑•̀ㅂ•́)و✧ 爱要坦荡荡 - 萧潇 - 单曲 - 网易云音乐 一&#xff0c;坑爹的奥数 枚举算法又叫穷举算法&#xff0c;非常的暴力&#xff0c;它的基本思想是“有序地去尝试每一种可能” 题目1 □3 x 6528 3□ x …

【JavaEE】网络初识之网络通信基础

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaEE】 ✈️✈️本篇内容:网络初识之网络通信基础。 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;JavaEE初阶代码存放&#xff01; ⛵⛵作者简介…

Uniswap v3 详解(二):创建交易对/提供流动性

前文已经说过 Uniswap v3 的代码架构。一般来说&#xff0c;用户的操作都是从 uniswap-v3-periphery 中的合约开始。 创建交易对 创建交易对的调用流程如下&#xff1a; 用户首先调用 NonfungiblePositionManager 合约的 createAndInitializePoolIfNecessary 方法创建交易对&…