老师帮忙看下代码

老师帮忙看下代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>账号注册</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .formContent{
            width: 1000px;
            margin: 0 auto;
            font-size: 18px;
            background: #ccc;
        }
        .title{
            background: #4f81c7;
            color: #fff;
            padding-left:18px;
            line-height: 36px;
            height: 36px;
        }
        .formMain{
            width: 500px;
            text-align: center;
            margin-top: 18px;
            margin-left: 50px;
            height: 446px;
        }
        .formMain form{
            color: #757575;
            text-align: right;
        }
        .formMain .info{
            margin: 18px auto;
        }
        .formMain .info input{
            width: 150px;
        }
        .formMain .info select{
            width: 150px;
        }
        .formMain .info .star{
            color: #f00;
            position: absolute;
            /* display: none; */
        }
        .formMain .btn{
            background-color: #4f81c7;
            font-size: 20px;
            width: 80px;
            height: 40px;
            line-height: 40px;
            color: #fff;
            border: 1px solid #757575;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <div class="formContent">
        <p class="title">用户注册</p>
        <div class="formMain">
            <form action="">
                <p class="info">
                    用户名:<input type="text" id="username"><span class="star">*</span>
                </p>
                <p class="info">
                    登录密码:<input type="text" id="password"><span class="star">*</span>
                </p>
                <p class="info">
                    确定密码:<input type="text" id="conPwd"><span class="star">*</span>
                </p>
                <p class="info">
                    姓名:<input type="text" id="name"><span class="star">*</span>
                </p>
                <p class="info">
                    性别:<select name="sex" id="sex">
                            <option value="boy">男</option>
                            <option value="girl">女</option>
                            <option value="hide">隐藏</option>
                        </select>
                </p>
                <p class="info">
                    身份证号码:<input type="text" id="userId"><span class="star">*</span>
                </p>
                <p class="info">
                    邮箱:<input type="text" id="email"><span class="star">*</span>
                </p>
                <p class="info">
                    手机号:<input type="text" id="phone"><span class="star">*</span>
                </p>
                    <button type="submit" class="btn" id="btn">提交</button>
            </form>
        </div>
    </div>
    <script>
        // 获取元素
        var getElem = function( selector ){
            return document.querySelector(selector);
        }
        var mainElem = {
            username:getElem("#username"),
            password:getElem("#password"),
            conPwd:getElem("#conPwd"),
            name:getElem("#name"),
            userId:getElem("#userId"),
            email:getElem("#email"),
            phone:getElem("#phone"),
            btn:getElem('#btn'),
            inputs:document.getElementsByTagName("input"),
            stars:document.getElementsByClassName('star')
        };
        // 正则表达式
        var pattern = {
            username:/^[a-zA-Z]\w{5,19}$/,
            password:/^\S{6,18}$/,
            conPwd:/^\S{6,18}$/,
            name:/^[\u4e00-\u9fa5]{2,4}$/,
            userId:/^[1-9]{1}\d{14}$|^[1-9]{1}\d{16}(\d|[xX])$/,
            email:/^(?:\w+\.)*(\w+)@(?:\w+\.)+([a-zA-Z])+$/,
            phone:/^13\d{9}|147\d{8}$|15[0,1,2,3,5,6,7,8,9]{1}\d{8}$|18[0,2,5,6,7,8,9]{1}\d{8}$/
        };
        // 错误时的提示文本
        var error = [
            '6-20位字母、数字或“_”,字母开头',
            '6-18位,包括数字字母或符号,中间不能有空格',
            '请确认密码',
            '真实姓名为2-4位中文',
            '请输入15或18位的身份证号码',
            '邮箱格式不正确,例如2019112@qq.com',
            '手机号码格式不正确'
        ];
        mainElem.username.focus();
        // 封装一个函数,判断输入的信息是否符合要求
        function judge(ele,reg,idx){
            var newStar = mainElem.stars[idx];
            if(reg.test(ele.value)){
                newStar.innerHTML = "OK";
                newStar.style.color = "green";
            }else{
                newStar.innerHTML = error[idx];
                newStar.style.color = "red";
            }
        }
        // event对象跨浏览器兼容
        var EventUtil = {
            addHandler: function(element, type, handler) {
                //绑定事件
                if(element.addEventListener) {
                    element.addEventListener(type, handler, false);
                } else if(element.attachEvent) {
                    element.attachEvent("on" + type, handler);
                } else {
                    element["on" + type] = handler
                }
            }
        }
        // 验证用户名是否符合要求  6-20位字母、数字或“_”,字母开头
        EventUtil.addHandler(mainElem.username,'blur',function(){
            return judge(mainElem.username,pattern.username,0);
        })
        // 验证登录密码是否符合要求  6-18位,包括数字字母或符号,中间不能有空格
        EventUtil.addHandler(mainElem.password,'blur',function(){
            return judge(mainElem.password,pattern.password,1);
        })
        // 验证确认密码是否与登录密码一致
        EventUtil.addHandler(mainElem.conPwd,'blur',function(){
            if(mainElem.password.value !=mainElem.conPwd.value){
                mainElem.stars[2].innerHTML = "两次密码不一致";
                mainElem.stars[2].style.color = "red";
                mainElem.conPwd.focus(); 
            }else{
                return judge(mainElem.conPwd,pattern.conPwd,2);
            }
        })
        // 验证姓名是否符合要求  两位到四位的中文
        EventUtil.addHandler(mainElem.name,'blur',function(){
            return judge(mainElem.name,pattern.name,3);
        })
        // 验证身份证号码是否符合要求  15位或18位身份证号
        EventUtil.addHandler(mainElem.userId,'blur',function(){
            return judge(mainElem.userId,pattern.userId,4);
        })
        // 验证邮箱是否符合要求
        EventUtil.addHandler(mainElem.email,'blur',function(){
            return judge(mainElem.email,pattern.email,5);
        })
        // 验证手机号是否符合要求
        EventUtil.addHandler(mainElem.phone,'blur',function(){
            return judge(mainElem.phone,pattern.phone,6);
        })
        var list = mainElem.inputs;
        // 判断所有输入框是否都符合表达式
        function allConfirm(){
            var str = list[i].value;
            var reg = pattern[list[i].id];
            var isResult = true;
            for(var i = 0;i < list.length;i++){
                isResult = isResult && reg.test(str);
            }
            return isResult;
        }
        // 给提交按钮绑定事件 
        EventUtil.addHandler(mainElem.btn,'click',function(){
            var str = list[i].value;
            var reg = pattern[list[i].id];
            if(allConfirm()){
                alert("注册成功!");
            }else{
                //遍历所有输入框,若不符合正则表达式,则显示错误文字
                for(var i=0;i<list.length;i++){
                    if(!reg.test(str)){
                        mainElem.stars[i].innerHTML = error[i];
                    }
                }
            }
        })
    </script>
</body>
</html>
  1. 提交按钮好像有点问题

  2. 其他部分代码有没有哪里还需要优化

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好同学,解答如下:

1.这个方法在小白入门阶段的《js事件》课程中提到过,不记得没有关系,这次记住就行。

很简单,直接记住event.preventDefault()是阻止元素的默认行为即可哦。

2. 邮箱,电话你可以按照你说的改一改类型,但是不改也没有关系,因为它们与text文本表现形式差不多,都是可见的。在html5 新的类型出现之前,就是使用text类型。但是密码如果是text类型,那么密码就能看到了。

http://img1.sycdn.imooc.com//climg/5dc0d48c09b26e2e04070092.jpg

而密码一般是不可见的,这个比较重要,所以老师让你专门改一下密码的类型。

http://img1.sycdn.imooc.com//climg/5dc0d4a80907985302540106.jpg

祝学习愉快,望采纳。

好帮手慕夭夭 2019-11-04 10:52:24

你好同学,解答如下:

1.在提交按钮事件中,i还没有定义,就在前面使用了,所以控制台会报错

http://img1.sycdn.imooc.com//climg/5dbf917f0911625f05900224.jpg

http://img1.sycdn.imooc.com//climg/5dbf91ac09875e8107170193.jpg

要把代码放在循环中,如下:

http://img1.sycdn.imooc.com//climg/5dbf921909352e4f07250606.jpg

2. 密码输入框的类型不对,如下修改

http://img1.sycdn.imooc.com//climg/5dbf925409d97e9304810138.jpg

其他的没有问题,做的不错,继续加油,祝学习愉快!望采纳。

  • 提问者 林迦叶 #1
    谢谢老师,我想问一下,上面说的submit按钮有默认提交的行为,那个阻止行为的函数我们之前学过吗,不记得了? 还有邮箱需要将类型改为email,电话号码的类型改成tel吗?
    2019-11-04 22:38:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师