JavaScript(三十三)表单验证demo2

表单验证

填完每一项内容就进行判断,不符合要求就会报错

效果展示

全部代码

<!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">&#xf01a6;</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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值