手机号验证码重新发送

前文叙述

很久以前做的一个 demo ,纯 HTML 、CSS、js 制作,一定时间段之后才可以重新发送验证码,如 60s
后再次发送验证码,在该时间段内发送验证码按钮为禁用状态,实战开发过程也亦是同理,因此记录一手。

一、效果图:

请添加图片描述

二、实现代码:

<!DOCTYPE html>
<html>
<head><title>登录表单</title><style>body {font-family: Arial, sans-serif;background-color: #f2f2f2;min-height: 100vh;display: flex;justify-content: center;align-items: center;border-}.container {max-width: 400px;min-width: 400px;margin: auto;padding: 20px;background-color: #fff;border-radius: 5px;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);}h2 {text-align: center;margin-bottom: 30px;}.form-group {margin-bottom: 20px;}.form-group-inline {display: flex;align-items: center;}label {display: block;font-weight: bold;margin-bottom: 5px;flex: 0 0 100px;}input[type="text"],input[type="password"] {flex: 1;padding: 10px;border: 1px solid #ddd;border-radius: 4px;box-sizing: border-box;}input[type="text"]:fous{border-color: #ebecff;}.btn {display: inline-block;padding: 10px 20px;background-color: #4caf50;color: #fff;text-align: center;text-decoration: none;border-radius: 4px;cursor: pointer;transition: background-color 0.3s;}#code {width: 100px;margin-right: 30px;}.btn:hover {background-color: #45a049;}.btn-disabled {background-color: #ccc;cursor: not-allowed;}</style>
</head>
<body><div class="container"><h2>登录</h2><div class="form-group form-group-inline"><label for="phone">手机号码:</label><input type="text" id="phone" placeholder="请输入手机号码"></div><div class="form-group form-group-inline"><label for="code">验证码:</label><input type="text" id="code" placeholder="请输入验证码"><button id="sendCode" class="btn">发送验证码</button></div><button id="loginBtn" class="btn">登录</button></div><script>// 获取DOM元素const phoneInput = document.getElementById('phone');const codeInput = document.getElementById('code');const sendCodeBtn = document.getElementById('sendCode');const loginBtn = document.getElementById('loginBtn');let timer;let countdown = 60;function validatePhoneNumber(phoneNumber) {// 使用正则表达式进行手机号码校验let regex = /^1[0-9]{10}$/;return regex.test(phoneNumber);}function validateVerificationCode(code) {// 使用正则表达式进行六位数验证码校验let regex = /^\d{6}$/;return regex.test(code);
}// 发送验证码按钮点击事件sendCodeBtn.addEventListener('click', () => {if (!phoneInput.value) {alert('请输入手机号码');return;}if (!this.validatePhoneNumber(phoneInput.value)) {alert("请输入合法手机号");return;}// 禁用发送验证码按钮sendCodeBtn.disabled = true;sendCodeBtn.classList.add('btn-disabled');// 开始倒计时countdown = 10;sendCodeBtn.innerText = `${countdown}s`;sendCodeBtn.style.display = 'block';timer = setInterval(() => {countdown--;if (countdown === 0) {// 倒计时结束,恢复发送验证码按钮状态clearInterval(timer);sendCodeBtn.disabled = false;sendCodeBtn.classList.remove('btn-disabled');sendCodeBtn.innerText = "发送验证码";} else {sendCodeBtn.innerText = `${countdown}s`;}}, 1000);// 模拟发送验证码的逻辑,这里使用了setTimeoutsetTimeout(() => {alert('验证码已发送,请注意查收');}, 2000);});// 登录按钮点击事件loginBtn.addEventListener('click', () => {// 检查手机号和验证码是否为空if (!phoneInput.value || !this.validatePhoneNumber(phoneInput.value)) {alert('请输入合法手机号');return;}if (!this.validateVerificationCode(codeInput.value)) {alert('请输入合法验证码');return;}});</script>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XSS-Labs靶场1---11关

一、XSS环境搭建&#xff1a; [ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客 &#xff08;该博主总结的较为详细&#xff0c;若侵权必删&#xff09; 常用的xss攻击语句&#xff1a; 输入检测确定标签没有过滤后&#xff0c;为了显示存在漏洞&#…

【2024】Python入门教程从零基础入门到精通,看这一篇就够了

对于刚开始接触Python的小伙伴来说&#xff0c;没有思路方法&#xff0c;不知道从何开始学习&#xff0c;把软件环境安装好后就不知所措了&#xff01;接下来我给大家分享下多位大牛倾力打造的python 系统学习流程&#xff0c;一个月才设计完的&#xff01; 一、学习Python的4…

redis缓存满了的话会发生什么?

线上问题 未及时加监控&#xff0c;导致线上redis被逐出&#xff0c;业务有损 示例&#xff1a; 一个key临时存储在redis等缓存中&#xff0c;如果该key在一段时间内有很大作用 比如一次业务请求&#xff0c;上游服务写入一个value&#xff0c;时长1小时&#xff0c;下游服务…

蓝桥杯刷题5--GCD和LCM

目录 1. GCD 1.1 性质 1.2 代码实现 2. LCM 2.1 代码实现 3. 习题 3.1 等差数列 3.2 Hankson的趣味题 3.3 最大比例 3.4 GCD 1. GCD 整数a和b的最大公约数是能同时整除a和b的最大整数&#xff0c;记为gcd(a, b) 1.1 性质 GCD有关的题目一般会考核GCD的性质。   …

QGridLayout网格布局和QVBoxLayout垂直布局有着非常大的差别

QGridLayout网格布局&#xff1a;1.把这块控件划分成一个个的 单元格 2.把你的控件填充进入 单元格 3.这些有关限制大小的函数接口统统失效 setMaximumWidth&#xff08;&#xff09; setMinimumWidth() setPolicySize()图示&#xff1a;我是用的网格布局&#xff0c;左边放QT…

300分钟吃透分布式缓存-24讲:Redis崩溃后,如何进行数据恢复的?

Redis 持久化是一个将内存数据转储到磁盘的过程。Redis 目前支持 RDB、AOF&#xff0c;以及混合存储三种模式。 RDB Redis 的 RDB 持久化是以快照的方式将内存数据存储到磁盘。在需要进行 RDB 持久化时&#xff0c;Redis 会将内存中的所有数据以二进制的格式落地&#xff0c;每…

项目实战之跨语言调用api——结合语言优点解决实际问题

前情提要 在一个项目开发中需要后端解析并分析数据得出结果报告&#xff0c;一开始用的Java后端&#xff0c;后面一堆Json数据解析的实在头疼&#xff0c;于是捡起老胶水&#xff1a;Python 辅助开发作为后端的核心算法部分服务接口 Java&#xff1a;SpringBoot 结合 RestTemp…

html--彩虹爱心

文章目录 js内容cssreset.min.cssstyle.css html内容 js内容 const colors ["#e03776","#8f3e98","#4687bf","#3bab6f","#f9c25e","#f47274"]; const SVG_NS http://www.w3.org/2000/svg; const SVG_XLINK &q…

数据分析-Pandas数据画箱线图

数据分析-Pandas数据画箱线图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&#xff…

Python快速入门系列-2(Python的安装与环境设置)

第二章&#xff1a;Python的安装与环境设置 2.1 Python的下载与安装2.1.1 访问Python官网2.1.2 安装Python对于Windows用户对于macOS用户对于Linux用户 2.2 集成开发环境&#xff08;IDE&#xff09;的选择与设置2.2.1 PyCharm2.2.2 Visual Studio Code2.2.3 Jupyter Notebook2…

7. 交叉开发环境设置

嵌入式交叉编译工具 ​ 交叉编译工具是为了使在上位机中编译的文件能够在不同平台的目标机中执行&#xff0c;搭建交叉编译环境是嵌入式开发的第一步&#xff0c;也是关键的一步。不同的体系结构、不同的操作系统&#xff0c;甚至是不同版本的内核&#xff0c;都会用到不同的交…

看了很多文章,就这篇说明白了什么是接口测试!

接口&#xff08;API&#xff09;是一个简称&#xff0c;全名叫应用程序编程接口(Application Programming Interface)&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解…