注册表单提交加验证码功能

1.表单需包含昵称、姓名、QQ、手机号、邮箱、密码、确认密码以 发送验证码及提交和重置按钮;

2.点击表单里的输入框,隐藏提示文字;

3.点击提交和重置按钮时,都需要有相应的提示;

4.在表单提交是,需要进行验证验证填写内容是否合理:昵称不超 过10个字、姓名不超过4个字、QQ号为长度小于等于10大于5位的数字、手机号为长度11位的数字、密码由字母和数字组成且大于8位小于16位、密码和确认密码需相同。

5.发送验证码按钮点击后,会被禁用;发送验证码按钮被点击后,按钮里面的内容会变化成1分钟的倒计时;待发送验证码按钮被触发后才可以点击提交按钮,需在验证码框里填写 0505,用弹窗提示成功。

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

</head>

<body>

<div class="container">

<div class="card">

<form class="form">

<div data-prop="username" class="form-item">

<span class="zhanghao1"></span>

<input type="text" name="username" placeholder="设置昵称">

<span class="msg"></span>

</div>

<div data-prop="realname" class="form-item">

<span class="realname1"></span>

<input type="text" name="realname" placeholder="输入真实姓名">

<span class="msg"></span>

</div>

<div data-prop="QQ" class="form-item">

<span class="QQ1"></span>

<input type="text" name="QQ" placeholder="QQ号">

<span class="msg"></span>

</div>

<div data-prop="phone" class="form-item">

<span class="phone1"></span>

<input type="text" name="phone" placeholder="输入手机号码">

<span class="msg"></span>

</div>

<div data-prop="email" class="form-item">

<span class="email1"></span>

<input type="text" name="email" placeholder="输入邮箱">

<span class="msg"></span>

</div>

<div data-prop="password" class="form-item">

<span class="password1"></span>

<input type="password" name="password" placeholder="设置密码">

<span class="msg"></span>

</div>

<div data-prop="confirm" class="form-item">

<span class="confirm1"></span>

<input type="password" name="confirm" placeholder="确认密码">

<span class="msg"></span>

</div>

<div data-prop="code" class="form-item">

<span class="code1"></span>

<input type="text" name="code" placeholder="短信验证码">

<span class="msg"></span>

<button id="getcode">发送验证码</button>

</div>

<button class="submit">提交</button>

<button class="again">重置</button>

</form>

</div>

</div>

<script>

// 获取元素

const inp = document.querySelectorAll('input')

const submit = document.querySelector('.submit')

const again = document.querySelector('.again')

// username

const username =document.querySelector('[name=username]')

// 绑定change事件(失去焦点且内容发生改变的)

username.addEventListener('change', verifyUserName)

function verifyUserName() {

// 获取输入框的下一个兄弟元素(用来展示错误提示的<span>)

const span = username.nextElementSibling

// 定义正则规则:匹配"1~10个任意字符"

const reg = /^.{1,10}$/

// 校验输入值:不满足规则

if (!reg.test(username.value)) {

span.innerText = '昵称不超过10个字' // 显示错误提示

return false // 表示验证不通过

}

else {

span.innerText = '' // 清空提示

return true // 表示验证通过

}

}

// realname

const realname =document.querySelector('[name=realname]')

realname.addEventListener('change', verifyRealName)

function verifyRealName() {

const span = realname.nextElementSibling

const reg = /^.{1,4}$/

if (!reg.test(realname.value)) {

span.innerText = '姓名不超过4个字'

return false

}

else {

span.innerText = ''

return true

}

}

// qq

const QQ = document.querySelector('[name=QQ]')

QQ.addEventListener('change', verifyQQ)

function verifyQQ() {

const span = QQ.nextElementSibling

const reg = /^\d{6,10}$/

if(!reg.test(QQ.value)) {

span.innerText = '长度小于等于10大于5位的数字'

return false

}

span.innerText = ''

return true

}

// Phone

const phone = document.querySelector('[name=phone]')

phone.addEventListener('change', verifyPhone)

function verifyPhone() {

const span = phone.nextElementSibling

const reg = /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/

if(!reg.test(phone.value)) {

span.innerText = '请输入正确的11位手机号码'

return false

}

span.innerText = ''

return true

}

// password

const password = document.querySelector('[name=password]')

password.addEventListener('change', verifyPwd)

function verifyPwd() {

const span = password.nextElementSibling

const reg = /^[a-zA-Z0-9-_]{9,16}$/

if(!reg.test(password.value)) {

span.innerText = '密码由字母和数字组成且大于8位小于16位'

return false

}

span.innerText = ''

return true

}

// 输入框点击交互

inp.forEach(function(input) {

input.addEventListener('click',function () {

this.placeholder = '' // 用户点击输入框时,清空该输入框的placeholder

})

})

// 表单重置按钮

again.addEventListener('click', function () {

alert('您确定要重置吗?')

inp.forEach(function (input) {

input.value = ''

})

})

// 表单提交按钮

submit.addEventListener('click', function () {

alert('您确定要提交吗?')

const inpCode = document.querySelector('[name=code]')

// 除去内容前后空格

const inpValue = inpCode.value.trim()

// 校验验证码是否是"0505"

if(inpValue !== "0505") {

alert('请输入正确的验证码')

}

else {

alert('成功')

}

Pass () // 调用密码一致性校验函数

// 清空所有输入框

inp.forEach(function(input) {

input.value = ''

})

})

let flag = true // 控制验证码按钮是否可点击的标记

const code = document.querySelector('#getcode')

code.addEventListener('click', function (e) {

e.preventDefault() // 阻止按钮默认行为

if(flag) {

// 倒计时开始,标记为"不可点击"

flag =false

let i = 60

code.innerHTML = `${i}秒后重新获取`

// 启动定时器,每一秒执行一次

let timerId = setInterval(function () {

i--

code.innerHTML = `${i}秒后重新获取`

// 倒计时结束

if (i === 0) {

clearInterval(timerId) // 清除定时器

code.innerHTML = `重新获取`

flag = true // 标记为可点击

}

}, 1000)

}

})

function Pass () {

// 获取元素

const password = document.querySelector('[name=password]').value

const confirm = document.querySelector('[name=confirm]').value

// 校验两次输入的密码是否一致

if(password !== confirm) {

alert('两次密码输入不一致,请再次输入')

return false

}

else {

return true

}

}

</script>

</body>

</html>

相关推荐
范纹杉想快点毕业2 小时前
嵌入式C语言实战开发详解
linux·运维·算法
hanyi_qwe2 小时前
Docker 镜像的创建 【docker (四)】
运维·docker·容器
张某人的胡思乱想2 小时前
周末随笔-整理ubuntu环境
linux·运维·ubuntu
翔云 OCR API2 小时前
智能发票查验接口在财务自动化中的技术实现与应用价值
linux·运维·自动化
盛世宏博北京3 小时前
从服务器机房到 IDC 集群:网口温湿度变送器的全场景适配监控
运维·服务器
RPA机器人就选八爪鱼3 小时前
RPA在银行IT运维领域的应用场景与价值分析
大数据·运维·数据库·人工智能·机器人·rpa
松涛和鸣4 小时前
41、Linux 网络编程并发模型总结(select / epoll / fork / pthread)
linux·服务器·网络·网络协议·tcp/ip·算法
Linux Huang4 小时前
spring注册组件/服务无效,问题排查
大数据·服务器·数据库·spring
心无旁骛~4 小时前
ModelEngine Nexent 智能体从创建到部署全流程深度体验:自动化利器让 AI 开发效率拉满!
运维·人工智能·自动化