表单验证
填完每一项内容就进行判断,不符合要求就会报错
效果展示
全部代码
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>表单验证</title>
<link rel="stylesheet" href="css/iconfont.css"/>
<style>
#formuser {
display: block;
margin: 0 auto;
width: 400px;
}
.form_user > li {
list-style: none;
height: 50px;
width: 400px;
border: 1px solid silver;
border-radius: 5px;
position: relative;
margin: 40px 0;
}
.form_user > li.litxt > input {
margin-left: 1px;
width: 378px;
height: 48px;
border-style: none;
outline: none;
font-size: 20px;
color: black;
padding-left: 20px;
}
.tel {
position: relative;
border-style: none !important;
}
.usertelno {
width: 150px;
height: 50px;
border: 1px solid silver;
border-radius: 5px;
line-height: 50px;
position: relative;
float: left;
}
.usertelno > input {
position: absolute;
top: 0;
left: 1px;
width: 120px;
height: 48px;
padding-left: 20px;
border-style: none;
font-size: 20px;
outline: none;
}
#icon {
position: absolute;
right: 10px;
top: 0;
z-index: 2;
color: gray;
}
.ph {
float: right;
width: 210px;
height: 50px;
border-radius: 5px;
border: 1px solid silver;
font-size: 20px;
padding-left: 20px;
outline: none;
}
.btn > input {
width: 400px;
height: 50px;
outline: none;
border-style: none;
background-color: transparent;
color: white;
font-size: 22px;
}
.btn {
background-color: #2e7fff;
}
.btn:hover {
background-color: #40a6ff;
}
.telerror {
clear: left;
display: block;
font-size: 14px;
color: gray;
position: relative;
top: 5px;
}
.emailshow {
display: block;
font-size: 14px;
color: gray !important;
position: absolute;
top: 53px;
}
.error {
font-size: 14px;
color: red;
position: absolute;
top: 53px;
background-image: url("img/error@2x.png");
background-repeat: no-repeat;
background-size: 18px;
padding-left: 25px;
}
.success {
display: none;
position: absolute;
top: 15px;
right: 10px;
}
</style>
</head>
<body>
<form id="formuser" action="" method="get">
<ul class="form_user">
<li class="litxt">
<input type="text" class="userData" name="email" placeholder="邮箱" value=""/>
<span class="emailshow">请输入你常用的邮箱(非qq/foxmail邮箱)</span>
<img class="success" src="./img/tick.png" alt=""/>
</li>
<li class="litxt">
<input type="text" class="userData" name="nickname" placeholder="昵称" value=""/>
<img class="success" src="./img/tick.png" alt=""/>
</li>
<li class="litxt">
<input type="text" class="userData" name="password" placeholder="密码" value=""/>
<img class="success" src="./img/tick.png" alt=""/>
</li>
<li class="tel">
<div class="usertelno">
<input type="text" id="telnum" value="+86"/>
<i id="icon" class=" iconfont">󰆦</i>
</div>
<input class="ph" placeholder="手机号码" type="text"/>
<span class="telerror">可通过该手机号找回密码</span>
</li>
<li class="btn"><input type="submit" value="立即注册"/></li>
</ul>
</form>
<script>
var btnChild = document.getElementsByClassName("btn")[0].children; //获取到立即注册按钮
var emailshow = document.getElementsByClassName("emailshow")[0]; //获取到 请输入你常用的邮箱
var litxt = document.getElementsByClassName("litxt"); //获取三个框的父元素
var formuser = document.getElementById("formuser"); //获取的表单id
var nameinfo = ["邮箱", "昵称", "密码"];
var success = document.getElementsByClassName("success");
var userData = document.getElementsByClassName("userData"); //获取三个框 input
var telnum = document.getElementById("telnum");//获取电话号码的文本框
var telnumber = document.getElementsByClassName("telnumber")[0]; //获取各个地方的电话号码
//效果事件
telnum.onfocus = function () {
telnumber.style.display = "block";
};
telnum.onblur = function () {
telnumber.style.display = "none";
};
//用户点击单个注册
/* window.onload =*/
addEvent();
function addEvent() {
for (var i = 0; i < userData.length; i++) {
userData[i].index = i;
// input获焦
userData[i].onfocus = function () {
emailshow.style.display = "none";
this.parentNode.style.borderColor = "#2e7fff"; //显示边框蓝色
//单独点击文本框 下面的报错移除,不能隐藏掉(隐藏表示一直存在)
//两个条件,防止事件冒泡 将span标签都删除
if (this.parentNode.lastChild.nodeName.toLowerCase() == "span" && this.parentNode.lastChild.className == "error") {
this.parentNode.lastChild.remove();
}
};
// input失焦 俩种情况 为空或格式不正确
userData[i].onblur = function () {
/* this.parentNode.style.borderColor = "silver";*/
if (this.value == "") {
litxt[this.index].style.borderColor = "red";
//创建一个类名称为error的元素 追加给litxt,每一个框
var span = document.createElement("span");
span.className = "error";
span.innerHTML = nameinfo[this.index] + "不能为空!";
litxt[this.index].appendChild(span);
}
//不为空的时候判断格式
else {
if (this.index == 0) {
if (userData[this.index].value.indexOf("@") != -1 && userData[this.index].value.indexOf("@") + 1 != userData[this.index].value.length) {
success[this.index].style.display = "block";
}
else {
var span = document.createElement("span");
span.className = "error";
span.innerHTML = nameinfo[this.index] + "格式不正确!";
litxt[this.index].appendChild(span);
}
}
if (this.index == 1) {
success[this.index].style.display = "block";
}
if (this.index == 2) {
/*6-8位*/
if (userData[this.index].value.length >= 6 && userData[this.index].value.length<= 8) {
if (!isNaN(userData[this.index].value)) {
var span = document.createElement("span");
span.className = "error";
span.innerHTML = nameinfo[this.index] + "必须有字母或者是字符!";
litxt[this.index].appendChild(span);
}
else {
success[this.index].style.display = "block";
}
}
else {
var span = document.createElement("span");
span.className = "error";
span.innerHTML = nameinfo[this.index] + "必须是6-8位!";
litxt[this.index].appendChild(span);
}
}
}
}
}
}
//自动验证 处理用户直接点击注册 直接提交的bug
function submethods() {
emailshow.style.display = "none";
for (var i = 0; i < litxt.length; i++) {
if (litxt[i].children[0].value == "") {
litxt[i].style.borderColor = "red";
//创建一个类名称为error的元素 追加给litxt,每一个框
/*创建为dom元素之后 就可以处理事件的丢失*/
if(litxt[i].lastElementChild.className!="error"){
var span = document.createElement("span");
span.className = "error";
span.innerHTML = nameinfo[i] + "不能为空!";
litxt[i].appendChild(span);
}
}
}
var length = document.getElementsByClassName("error").length;
return length;
}
//点击立即注册
formuser.onsubmit = function () {
if (submethods()) {
return false;
/*event.preventDefault();
event.stopPropagation();*/
}
return true;
};
</script>
</body>
</html>