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属性已经绑定了该元素在数组中的序号,所以直接在数组中删除这一元素,再重绘柱状图即可。

     

  • 相关阅读:
    第四百八十天 how can I 坚持
    第四百七十九天 how can I 坚持
    第四百七十八天 how can I 坚持
    第四百七十七天 how can I 坚持
    第四百七十六天 how can I 坚持
    《Java基础知识》JDK安装(Linux)
    《Java周边》vue开发环境搭建(windows)
    《Java Spring框架》Spring切面(AOP)配置详解
    《Java知识应用》Java读写DBF文件
    《Java知识应用》Java发送邮件(QQ,163)
  • 原文地址:https://www.cnblogs.com/cjlalala/p/5820745.html
Copyright © 2011-2022 走看看