• 32、任务三十二——实现表单工厂


    0、题目

    • 实现以JavaScript对象的方式定义表单及验证规则
    • 表单配置参考示例如下:(不需要一致,仅为参考)
      
          {
              label: '名称',                    // 表单标签
              type: 'input',                   // 表单类型
              validator: function () {...},    // 表单验证规
              rules: '必填,长度为4-16个字符',    // 填写规则提示
              success: '格式正确',              // 验证通过提示
              fail: '名称不能为空'               // 验证失败提示
          }
          
    • 基于该配置项,实现一套逻辑,可以自动生成表单的展现、交互、验证
    • 使用你制作的表单工厂,在一个页面上创建两套样式不同的表单

    1、解题过程

      1 <!DOCTYPE html>
      2 <html>
      3   <head>
      4     <meta charset="UTF-8">
      5     <title>IFE JavaScript Task 32</title>
      6     <style>
      7        form{
      8         margin:auto;
      9         width:860px;
     10         font-size: 20px;
     11     }
     12     label{
     13         display: inline-block;
     14         width:150px;
     15         text-align:center;
     16     }
     17     #buttons{
     18         margin:auto;
     19         height:100px;
     20         width:400px;
     21         display: block;
     22     }
     23     button{
     24         display:inline-block;
     25         border:1px solid #4e79b7;
     26         background-color:#4e79b7;
     27         width:120px;
     28         height:50px;
     29         margin:50px 25px 0 25px;
     30         font-size: 24px;
     31         color:white;
     32         border-radius: 7px;
     33     }
     34     button:focus{
     35         outline: none;
     36         border:1px solid #27569c;
     37         background-color:#27569c;
     38     }
     39     #nameid,#pw1id,#pw2id,#emailid,#phoneid{
     40         width:500px;
     41         height:20px;
     42         margin:20px;
     43         border-radius: 7px;
     44         border:2px solid #ccc;
     45     }
     46     #nameid:focus,#pw1id:focus,#pw2id:focus,#emailid:focus,#phoneid:focus{
     47         outline: none;
     48         border:2px solid #7dace9;
     49         border-radius: 7px;
     50         box-shadow: 0 2px 2px 2px #e1edfa;
     51     }
     52     .message{
     53         margin-left:180px;
     54     }
     55     .right{
     56         margin-left:180px;
     57         color: #81b950;
     58     }
     59     .wrong{
     60         margin-left:180px;
     61         color:#bd0315;
     62     }
     63     </style>
     64   </head>
     65 <body>
     66 <form id="factory">
     67 </form>
     68 <div id="buttons">
     69     <button id="submit">生成表单</button>
     70     <button id="testButton">验证</button>
     71 </div>
     72 <form id="show">
     73 </form>
     74 <script type="text/javascript" >
     75 function $(id){
     76     return document.getElementById(id);
     77 }
     78 //创建表单工厂
     79 function form(label,type,rules,success,fail,id,func){
     80     this.label=label;
     81     this.type=type;
     82     this.rules=rules;
     83     this.success=success;
     84     this.fail=fail;
     85     this.id=id;
     86     this.validator=func;
     87 }
     88 //验证输入是否合规
     89 var inputCheck={
     90     namefunc:function(){
     91         var name=$('nameid').value,
     92             length=checkLength(name);
     93         if(/^[a-zA-Z0-9u4e00-u9fa5]+$/.test(name)&&length>=4&&length<=16) a=1;
     94         else a=0;
     95     },
     96     pw1func:function (){
     97         var pw1=$('pw1id').value;
     98         if(/^[A-Za-z0-9]{8,16}$/.test(pw1))
     99             a=1;
    100         else  a=0;
    101     },
    102     pw2func:function (){
    103         var pw1=$('pw1id').value,
    104             pw2=$('pw2id').value;
    105         if (pw2==pw1&&/^[A-Za-z0-9]{8,16}$/.test(pw2))
    106             a=1;
    107         else a=0;
    108     },
    109     emailfunc:function (){
    110         var email=$('emailid').value;
    111         if(/w+([-+.´]w+)*@w+([-.]w+)*.w+([-.]w+)*/.test(email)) a=1;
    112         else a=0;
    113     },
    114     phonefunc:function (){
    115         var phone=$('phoneid').value;
    116         if(/^1[34578]d{9}$/.test(phone))a=1;
    117         else a=0;
    118     }
    119 }
    120 //用于生成验证表单
    121 var nameForm=new form('名称','text','长度为4~16字符','验证成功','名称错误','nameid',inputCheck.namefunc),
    122     pw1=new form('密码','password','长度为8~16字符,只能为数字、大小写字母','密码可用','密码不可用','pw1id',inputCheck.pw1func),
    123     pw2=new form('确认密码','password','再次输入相同密码','密码输入一致','密码输入不一致','pw2id',inputCheck.pw2func),
    124     email=new form('邮箱','text','请输入有效邮箱地址','邮箱格式正确','邮箱格式错误','emailid',inputCheck.emailfunc),
    125     phone=new form('手机号','text','请输入手机号','手机格式正确','手机格式错误','phoneid',inputCheck.phonefunc),
    126     makeForm=[nameForm,pw1,pw2,email,phone];
    127 //被勾选的选项存储子在newForm中
    128 var newForm=[],a;
    129 //用于生成初始表单
    130 var checkName=new form('名称','checkbox','nameBox'),
    131     checkPw1=new form('密码','checkbox','pw1Box'),
    132     checkPw2=new form('确认密码','checkbox','pw2Box'),
    133     checkEamil=new form('邮箱','checkbox','emailBox'),
    134     checkPhone=new form('手机号','checkbox','phoneBox'),
    135     nomal=[checkName,checkPw1,checkPw2,checkEamil,checkPhone];
    136 //生成初始表单
    137 window.onload=function(){
    138     var content='';
    139     for(var i=0;i<nomal.length;i++){
    140         content+='<label for="'+nomal[i].rules+'"><input class="checkbox" type="'+nomal[i].type+'" id="'+nomal[i].rules+'"name="'+nomal[i].rules+'">'+nomal[i].label+'</label>';
    141     }
    142     $('factory').innerHTML=content;
    143 };
    144 //点击生成表单
    145 $("submit").addEventListener("click",function(e){
    146     var result='',
    147         checkBoxes=document.getElementsByClassName('checkbox');
    148     for(var i=0;i<checkBoxes.length;i++){
    149         if(checkBoxes[i].checked&&i!=2){
    150             newForm.push(makeForm[i]);
    151             result+='<label for="'+makeForm[i].id+'">'+makeForm[i].label+'</label><input id="'+makeForm[i].id+'"type="'+makeForm[i].type+'"><br/><div class="message" id="'+makeForm[i].id+'Result">'+makeForm[i].rules+'</div>';
    152         }
    153         if(checkBoxes[i].checked&&i==2){
    154             if(checkBoxes[1].checked){
    155                 newForm.push(makeForm[i]);
    156                 result+='<label for="'+makeForm[i].id+'">'+makeForm[i].label+'</label><input id="'+makeForm[i].id+'"type="'+makeForm[i].type+'"><br/><div class="message"  id="'+makeForm[i].id+'Result">'+makeForm[i].rules+'</div>';
    157             }
    158             else continue;
    159         }
    160     }
    161     $("show").innerHTML=result;
    162 });
    163 //点击验证
    164 $('testButton').addEventListener("click",function(e){
    165     for(var i=0;i<newForm.length;i++){
    166         var newid=newForm[i].id+'Result'; //输出信息的div的id
    167         var x=newForm[i].validator(); //调用验证函数
    168         if(a==1){
    169             $(newid).innerHTML=newForm[i].success;
    170             $(newid).className="right";
    171         }
    172         else{
    173             $(newid).innerHTML=newForm[i].fail;
    174             $(newid).className="wrong";
    175         }
    176 
    177     }
    178 });
    179 //检验名称有多少个字符
    180 function checkLength(str){
    181     var len =0,temp=0;
    182     for(var j=0;j<str.length;j++){
    183     temp = 1;
    184     if(/^[u2E80-u9FFF]+$/.test(str[j])){
    185         temp = 2;
    186     }
    187     len += temp;
    188     }
    189     return len;
    190 }  
    191 </script>
    192 </body>
    193 </html>

    2、遇到的问题

  • 相关阅读:
    Centos 卸载 MySQL
    Kafka体系架构、命令、Go案例
    Go 平滑重启(优雅重启)
    etcd集群数据迁移至新集群
    ubuntu 20.04使用TLSv1
    mybatis拦截器对SQL处理,数据权限逻辑控制
    java敏感字查找和替换
    SpringBoot自定义validation验证
    java使用druid解析器解析SQL语句
    国产数据库人大金仓 KingbaseES V8 R2 在 x86_64 Linux 安装过程
  • 原文地址:https://www.cnblogs.com/cjlalala/p/5966621.html
Copyright © 2020-2023  润新知