老师这么简单的编程练习,为什么我会写出这么多代码?怎么精简一下

老师这么简单的编程练习,为什么我会写出这么多代码?怎么精简一下

<!DOCTYPE html>

<html lang="en">


<head>

<meta charset="UTF-8">

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

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

       * {

           padding: 0;

           margin: 0;

       }


       body {

           background-color: #eeeeee;

       }


       .wrap h1 {

           background-color: #3092D1;

           color: white;

           font-weight: normal;

           font-size: 16px;

           padding: 10px 20px;

       }


       .wrap .form-wrap {

           width: 80%;

           margin: 50px auto auto;

           font-size: 16px;

           line-height: 2em;

       }


       .wrap .form-wrap span {

           padding: 10px;

       }


       .wrap .form-wrap span.left {

           display: inline-block;

           width: 35%;

           text-align: right;

       }


       .wrap .form-wrap input,

       .wrap .form-wrap select {

           width: 200px;

           box-sizing: border-box;

           background-color: white;

           /* border-style:solid; */

       }


       /* 不知道input框多了什么 */

       .wrap .form-wrap select {

           margin-right: 5px;

       }


       .wrap .form-wrap .button {

           width: 80px;

           height: 40px;

           margin-top: 3px;

           margin-left: 40%;

           background-color: #2475B9;

           border-radius: 5px;

           color: white;

       }

   </style>

</head>


<body>

<section id="wrap" class="wrap">

<!-- 标题 -->

<h1>用户注册</h1>

<!-- form容器 -->

<div class="form-wrap">

<!-- 提交表单 -->

<form action="#" id="mainForm">

<span class="left">用户名:</span>

<input type="text" name="userName" id="userName">

<span></span><br>


<span class="left">登录密码:</span>

<input type="password" name="password" id="password">

<span></span><br>


<span class="left">确认密码:</span>

<input type="password" name="passwordConfirm" id="passwordConfirm">

<span></span><br>


<span class="left">姓名:</span>

<input type="text" name="name" id="name">

<span></span><br>


<span class="left">性别:</span>

<select name="sex" id="sex">

<option value="">--请选择--</option>

<option value="male">男</option>

<option value="female">女</option>

</select><span></span><br>


<span class="left">身份证号码:</span>

<input type="text" name="identityCard" id="identityCard">

<span></span><br>


<span class="left">邮箱:</span>

<input type="text" name="email" id="email">

<span></span><br>


<span class="left">手机号码:</span>

<input type="text" name="phone" id="phone">

<span></span><br>

<input type="button" class="button" id="button" value="提交" name="button">

</form>

</div>

</div>

</section>

<script>

       // 获取dom元素

       var form = {

           userName: document.querySelector("#userName"),

           password: document.querySelector("#password"),

           passwordConfirm: document.querySelector("#passwordConfirm"),

           name: document.querySelector("#name"),

           sex: document.querySelector("#sex"),

           identityCard: document.querySelector("#identityCard"),

           email: document.querySelector("#email"),

           phone: document.querySelector("#phone"),

       }

       // 标志位,全部为true才允许提交

       var flag = {

           userName: false,

           password: false,

           passwordConfirm: false,

           name: false,

           sex: false,

           identityCard: false,

           email: false,

           phone: false

       };

       var button = document.querySelector("#button");

       var mainForm = document.querySelector("#mainForm");

       // 正则匹配

       var patterns = {

           userName: /^[A-z]\w{5,19}$/,

           password: /^\S{6,18}$/,

           passwordConfirm: /^\S{6,18}$/,

           name: /^[\u4a00-\u9fa5]{2,4}$/,

           sex: /^(?:male|female)$/,

           identityCard: /^\d{15}$|^\d{17}[\dxX]$/,

           email: /^\w+@\w+\.com(\.cn)?$/,

           phone: /^(15[0-35-9]|13\d|18[025-9]|147)\d{8}$/

       }

       // 这是提示内容

       var tips = {

           userName: '<span style="color:red">用户名是6-20位字母、数字或“_”,字母开头<span>',

           password: '<span style="color:red">密码6-18位,包括数字字母或符号,中间不能有空格<span>',

           passwordConfirm: '<span style="color:red">两次密码不一致<span>',

           name: '<span style="color:red">两位到四位的中文汉字<span>',

           sex: '<span style="color:red">未选择性别<span>',

           identityCard: '<span style="color:red">15位或者18位的数字,18位时最后一位可能是x<span>',

           email: '<span style="color:red">邮箱格式不正确<span>',

           phone: '<span style="color:red">手机号格式不正确<span>',

           ok: '<span style="color:green">OK<span>'

       }

       // 绑定事件

       for (let elem in form) {

           form[elem].onblur = inspect;

       }

       // 正则匹配判断

       function inspect() {

           if (patterns[this.name].test(this.value)) {

               if (this.name == 'passwordConfirm') {

                   if (this.name == 'passwordConfirm') {

                       flag[this.name] = true;

                       this.nextElementSibling.outerHTML = tips['ok'];

                   } else {

                       flag[this.name] = false;

                       this.nextElementSibling.outerHTML = tips[this.name];

                   }

               }

               else {

                   flag[this.name] = true;

                   this.nextElementSibling.outerHTML = tips['ok'];

               }

           } else {

               flag[this.name] = false;

               this.nextElementSibling.outerHTML = tips[this.name];

           }

       };

       // 提交确认

       function confirm() {

           for (let elem in form) {

               form[elem].onblur();

           }

           for (let elem in flag) {

               if (flag[elem] != true) {

                   console.log(elem);

                   return;

               }

           }

           console.log("成功提交");

           mainForm.submit();

       }

       // 绑定提交事件

       button.onclick = confirm;

   </script>

</body>


</html>


正在回答 回答被采纳积分+1

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

1回答
好帮手慕夭夭 2019-04-26 13:50:48

你好同学,能够觉得的简单,说明知识学的不错,给同学一个赞。其实本题虽然简单,但是验证的内容还是挺多的,代码自然写的也会多一些.老师检查了一下同学的代码,并没有冗余的地方。而且实现的效果很棒,不需要修改了哦。

祝学习愉快 ,望采纳。

  • 老师form[elem].onblur();这句是什么意思呢,onblur语法不是onblur="SomeJavaScriptCode"么。
    2019-04-30 23:22:18
  • 这位同学代码中form对象保存了很多元素,form[elem]就是在循环中获取每一个元素。而事件名加括号是自动调用事件的意思。form[elem].onblur();就是自动调用元素的onblur事件哦
    2019-05-01 09:56:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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