html form表单验证和用户体验代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>改善用户体验的表单</title>
    <style>
        #pwdLvSpan{display: inline-block;
                    width:100px;
                    height: 5px;
                    background: #c3c3c3;
        }
        #pwdLvSpan i{
            display: block;
            background: green;
            height:5px;
            width:0;
        }
    </style>
</head>
<body>
    <form method="post" action="/test/" onsubmit="return eg.regCheck();">
        <input type="hidden" name="" id="errnum" value="0"/>
        账户:<input type="text" name="" id="userid" /><br/><br/>
        密码:<input type="password" name="" id="userpwd" />
        密码强度<span id="pwdLvSpan"><i id="pwdLv"></i></span><br/><br/>
        确认: <input type="password" name="" id="userpwd2" /><br/><br/>
        性别:<input type="radio" name="sex" value="1"  checked="checked"/><input type="radio" name="sex" value="0" /><br/><br/>
        年龄:<select name="" id="age">
                <option value="0" selected="selected">请选择年龄段</option>
                <option value="1">18岁以下</option>
                <option value="2">18-24岁</option>
                <option value="3">24-30岁</option>
                <option value="4">30-35岁</option>
                <option value="5">35岁以上</option>
        </select><br/><br/>
        爱好:<input type="checkbox" name="like" value="1" class="like" />
        上网<input type="checkbox" name="like" value="2" class="like">
        逛街<input type="checkbox" name="like" value="3" class="like">
        看电影<input type="checkbox" name="like" value="4" class="like">其他<br/><br/>
        简介:<textarea name="" rows="4" cols="18" id="about"></textarea><br/><br/>
        邮箱: <input type="text" name="" id="email" /> <br/><br/>
        <input type="submit" value="注册" id="regBtn">
        <input type="button" value="解锁" onclick="eg.unlock();" style="display: none;" id="regUnlock" />
    </form>
</body>
<script>
    // 表单验证
    var eg = {};
    // 申明一个对象当作命名空间使用
    // 定义一个公共函数获取id元素 减少代码量 提高复用率
    eg.$ = function (id) {
        return document.getElementById(id);
    };
    // 定义一个公共函数来获取制定class的名称元素集合,能兼容各浏览器
    eg.getElementsByClassName = function (className, element) {
      if (document.getElementsByClassName){
          return (element || document).getElementsByClassName(className)
      }
      var children = (element || document).getElementsByTagName('*');
      var elements = [];
      for (var i =0; i <children.length; i++){
          var child = children[i];
          var classNames = child.className.split(' ');
          for (var j=0; j < classNames.length; j++){
              if (classNames[j] == className){
                  elements.push(child);
                  break;
              }
          }
      }
      return elements;
    };
    // 定义一个公共函数解决监听事件兼容问题
    eg.addListener = function (target, type, handler) {
      if (target.addEventListener){
          target.addEventListener(type, handler, false);
      }else if (target.attachEvent) {
          target.attachEvent("on" + type, handler);
      }else{
          target["on" + type] = handler;
      }



    };
    // 主要验证方法
    eg.regCheck = function () {
        var uid = eg.$("userid");
        var upwd = eg.$("userid");
        var upwd2 = eg.$("userpwd2");
        if (uid.value == ''){
            alert("账户不能为空");
            uid.focus();
            eg.err();
            return false;
        }
        if (upwd.value == ''){
            alert("密码不能为空");
            upwd.focus();
            eg.err();
            return false;
        }
        if (upwd2.value == ''){
            alert("两次密码输入不同");
            upwd2.focus();
            eg.err();
            return false;
        }
        // 简介长度
        var about = eg.$("about");
        if (about.value.length>60){
            alert("简介太长!");
            about.focus();
            eg.err();
            return false;
        }
        // 选择年龄段
        var age =eg.$("age");
        if(age.value == "0"){
            alert("请选择年龄段!");
            age.focus(); //让输入框获得焦点
            eg.err();
            return false;
        }

        var likes = eg.getElementsByClassName("like");
        var likeNum = 0;
        for (var n=0;n<likes.length;n++){
            console.log(likes[n].checked);
            if (likes[n].checked){
                likeNum++;
            }
        }
        if(likeNum==0){
            alert("请至少选择一个爱好!");
            eg.err();
            return false
        }
        // 邮箱验证
        var email = eg.$("email");
        if(!/^[A-Za-z\d]+[A-Za-z\d\-_\.]*@([A-Za-z\d]+[A-Za-z\d]\-]*\.)+[A-Za-z]{2,4}$/.test(email.value)){
            alert("请输入正确的邮箱!");
            email.focus();
            eg.err();
            return false;
        }
        return true;
    };
    //添加一些交互事件
    eg.addEvent = function () {
        var pwd = eg.$("userpwd");
        eg.addListener(pwd, "keyup", function () {
            var lv = 0;
            if (/^\d{4,}$/.test(pwd.value)) {
                lv = 10;
            } else if (/^\w{4,}$/.test(pwd.value)) {
                lv = 25;
            } else if (/^\d\w{4,}$/.test(pwd.value)) {
                lv = 50;
            } else if (/^[\d\w~!@#$%\^&*\(\)\-{}\[\]=<>,\.\?\/]{4,}$/.test(pwd.value)) {
                lv = 100;
            } else if (pwd.value.length < 6 && pwd.value.length > 3) {
                lv = 60;
            }
            eg.$("pwdLv").style.width = lv + "px";
        });
    };
        eg.addEvent();




    // 出错时记录错误次数
    eg.err = function () {
        var el = eg.$("errnum");
        var old = el.value;
        el.value = parseInt(old)+1;
        eg.lock();

    };
    eg.lock = function () {
        var err = eg.$("errnum");
        if (parseInt(err.value) >2 ){
            eg.$("regBtn").disabled =true;
            eg.$("regUnlock").style.display="block";
        }
    };
    // 解锁
    eg.unlock = function () {
        eg.$("regBtn").disabled = false;
        eg.$("regUnlock").style.display = "none";

    }
</script>
</html>

猜你喜欢

转载自blog.csdn.net/m0_37392631/article/details/78705670
今日推荐