zoukankan      html  css  js  c++  java
  • 19、任务十八——事件委托、数组处理

    0、题目

    • 如图,模拟一个队列,队列的每个元素是一个数字,初始队列为空
    • 有一个input输入框,以及4个操作按钮
      • 点击"左侧入",将input中输入的数字从左侧插入队列中;
      • 点击"右侧入",将input中输入的数字从右侧插入队列中;
      • 点击"左侧出",读取并删除队列左侧第一个元素,并弹窗显示元素中数值;
      • 点击"右侧出",读取并删除队列又侧第一个元素,并弹窗显示元素中数值;
    • 点击队列中任何一个元素,则该元素会被从队列中删除

    1、解题过程

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>task18</title>
     6     <style>
     7     #button{
     8         display:inline-block;
     9     }
    10     ul{
    11         list-style: none;
    12     }
    13     li{
    14         background-color: red;
    15         display:inline-block;
    16         width:20px;
    17         padding:10px;
    18         margin-left:3px;
    19         color:white;
    20     }
    21     </style>
    22 </head>
    23  <body>
    25     <input id="input" type="text">
    26     <div id="button">
    27         <button id="leftin">左侧入</button>
    28         <button id="rightin">右侧入</button>
    29         <button id="leftout">左侧出</button>
    30         <button id="rightout">右侧出</button>
    31     </div>
    32     <ul id="result">
    33     </ul>
    34 <script>
    37     var $=function(id){
    38       return document.getElementById(id);
    39     }
    40     var number=[];
    41     //给按钮的父元素添加事件委托,避免给每个按钮添加点击事件
    42     $("button").addEventListener("click",function(e){  
    43         var target=e.target,
    44             value=$("input").value;
    45         switch(target.id){
    46             case "leftin":{
    47                 if(!/^d+$/.test(value))alert("请输入有效的数字");
    48                 else{
    49                     number.unshift(value);
    50                 show();
    51                 }
    52                 break;
    53             }
    54             case "rightin":{
    55                 if(!/^d+$/.test(value)) alert("请输入有效的数字");
    56                 else{
    57                     number.push(value);
    58                     show();
    59                 }
    60                 break;
    61             }
    62             case "leftout":{
    63                 alert(number.shift(number[number.length-1]));
    64                    show();
    65                    break;
    66             }
    67             case "rightout":{
    68                 alert(number.pop(number[0]));
    69                 show();
    70                 break;
    71             }
    72         }
    73     })
    74     //给输出的结果添加事件委托,使点击的元素被删除
    75        $("result").addEventListener("click",function(e){
    76         var target=e.target;
    77         if(target.nodeName!="LI") return;
    78         var tar=parseInt(target.getAttribute("id"));   //得到被点击元素的id属性,之前id绑定的是该元素在数组中的序号
    79         number.splice(tar,1);   //删除数组number中的元素,1代表只删除一个元素
    80         show();
    81         return number;
    82     })
    83     //将得到的用户输入数据输出显示到id为result的列表中
    84     function show(){
    85         var content=" ";
    86         for(var i=0;i<number.length;i++){
    87                 content+="<li id='"+i+"'>"+number[i]+"</li>";
    88             }
    89         result.innerHTML=content;
    90     }
    91 </script>
    92 </body>
    93 </html>

    2、遇到的问题

    (1)对输入的数据进行验证

      题目要求输入的数据是数字,所以用isNaN( )函数对输入的数据进行验证,后来发现没有输入数据以及输入空格时,返回值都是false,原来isNaN()是把空串或空格作0处理的,所以返回值是false。因此用正则表达式验证数据是否为数字。

    (2)点击的元素被删除

      给输出的结果添加事件委托,验证被点击元素是否是<li>元素,如果是,就获取被点击元素的id属性,之前每个<li>元素的id属性已经绑定了该元素在数组中的序号,所以直接在数组中删除这一元素,再重绘柱状图即可。

     

  • 相关阅读:
    Asp.net 动态添加Meta标签
    【转】在SharePoint Server 2010中更改“我的网站”
    SPQuery DateTime 类型查询
    Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
    How To Create SharePoint 2010 Site Collection In Its Own DB
    C# 文件打印
    面试题 java集合
    《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
    《深入理解Java虚拟机》(五)JVM调优
    《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/cjlalala/p/5820745.html
Copyright © 2011-2022 走看看