• 31、任务三十一——表单联动


    0、题目

    • 示例图中所示,在页面中完成两个单选框,切换单选框的不同选项时下方显示的表单随之切换。
    • 当选择在校生时,出现两个select下拉菜单,一个选择城市,一个选择学校,当选择非在校生时,出一个文本输入框
    • 学校下拉菜单里的学校名单均为城市下拉菜单中所选的城市中的大学,当城市发生变化时,学校一起发生变化
    • 城市及学校的数据随意编造即可,无需真实完整

    1、解题过程

      1 <!DOCTYPE html>
      2 <html>
      3   <head>
      4     <meta charset="UTF-8">
      5     <title>IFE JavaScript Task 31</title>
      6     <style>
      7     form{
      8         margin:auto;
      9         width:800px;
     10         font-size:22px;
     11         margin-top: 100px;
     12         text-align:center;
     13     }
     14     .notStudent{
     15         margin-left: 60px;
     16     }
     17     select{
     18         width:300px;
     19         height:30px;
     20         margin:60px 30px 20px 30px;
     21         border:2px solid #ccc;
     22         border-radius: 7px;
     23     }
     24     #city{
     25         width:150px;
     26     }
     27     #employment{
     28         width:500px;
     29         height:30px;
     30         border:2px solid #ccc;
     31         border-radius: 7px;
     32         margin-left: 20px; 
     33     }
     34     select:focus,#employment:focus{
     35         outline: none;
     36         border:2px solid #7dace9;
     37         border-radius: 7px;
     38     }
     39     #inSchool{
     40         display:none;
     41     }
     42     #outSchool{
     43         display: none;
     44         margin-top: 60px;
     45     }
     46     </style>
     47   </head>
     48 <body>
     49 <form>
     50     <label for="student" class="student">在校生</label>
     51      <input id="student" name="people" type="radio">
     52     <label for="notstudent" class="notStudent">非在校生</label>
     53        <input id="notstudent" name="people" type="radio">
     54     <div id="inSchool">
     55         <label>学校</label>
     56         <select id="city">
     57             <option id="bj" class="opt">北京</option>
     58             <option id="sh" class="opt">上海</option>
     59             <option id="wh" class="opt">武汉</option>
     60             <option id="xa" class="opt">西安</option>
     61         </select>
     62         <select id="collage">
     63             <option>北京大学</option>
     64             <option>清华大学</option>
     65             <option>中国人民大学</option>
     66             <option>北京师范大学</option>
     67         </select>
     68     </div>
     69     <div id="outSchool">
     70         <label for="employment">就业单位<label>
     71             <input type="text" id="employment">
     72     </div>
     73 </form>
     74 <script type="text/javascript" >
     75 function $(id){
     76     return document.getElementById(id);
     77 }
     78 //选中在校生
     79 $("student").addEventListener("click",function(){
     80     $("outSchool").style.display="none";
     81     $("inSchool").style.display="block";
     82 });
     83 //选中非在校生
     84 $("notstudent").addEventListener("click",function(){
     85     $("inSchool").style.display="none";
     86     $("outSchool").style.display="block";
     87 });
     88 var data={
     89     bj:["北京大学","清华大学","中国人民大学","北京师范大学"],
     90     sh:["复旦大学","上海交通大学","同济大学","华东师范大学"],
     91     wh:["武汉大学","华中科技大学","华中农业大学","武汉理工大学"],
     92     xa:["西安交通大学","西北大学","西北工业大学","陕西师范大学"]
     93 }
     94 //城市选项改变时触发事件
     95 $("city").addEventListener("change",change);
     96 
     97 //二级表单联动(一次循环)
     98 var options=document.getElementsByClassName('opt');//得到城市名数组
     99 function change(){
    100      //得到被选中城市名的id
    101         var id=options[$("city").selectedIndex].getAttribute("id"),  
    102             content="";
    103         for(var j=0;j<data[id].length;j++){
    104             content+="<option>"+data[id][j]+"</option>";
    105         } 
    106         $("collage").innerHTML=content;    
    107 }
     1 //二级表单联动(两次循环)
     2  var options=document.getElementsByClassName('opt');
     3  function change(){
     4  for(var i=0;i<options.length;i++){//遍历所有城市名得到被选中的那个
     5    if(options[i].selected){ 
     6         var id=options[i].getAttribute("id"),  
     7             content="";
     8          for(var j=0;j<data[id].length;j++){
     9             content+="<option>"+data[id][j]+"</option>";
    10          } 
    11          $("collage").innerHTML=content;    
    12    }
    13   }   
    14  }
    108 </script>
    109 </body>
    110 </html>

    2、遇到的问题

    (1)使用 input 创建单选按钮(radio)时,所有的选项的name应该一样;

    (2)selectedIndex 属性可设置或返回下拉列表中被选选项的索引号。(如果多重选择,则返回第一个被选中的索引号)

      A、以下代码可在警告框中显示被选中的内容: 

      var x=document.getElementById("myOptions");

      alert(x[ x.selectedIndex ].innerHTML);

      B、以下代码可以删除被选中的选项:

       x.remove(x.selectedIndex)

        

  • 相关阅读:
    前端性能优化总结
    Vue style 深度作用选择器 >>> 与 /deep/(sass/less)
    NPM依赖包版本号~和^的区别及最佳实践
    umi部分使用总结
    FIS 插件机制
    从0到1发布一个npm包
    页面性能监控之performance
    1和new Number(1)有什么区别
    实现一个hoverDelay延迟hover
    触发浏览器回流的属性方法一览表
  • 原文地址:https://www.cnblogs.com/cjlalala/p/5945535.html
Copyright © 2020-2023  润新知