求职面试职场创业前端开发那些事

阿里前端开发编程测验反思总结

2017-08-22  本文已影响71人  啊鹰的

题目:实现删除买家信息,使用原生JavaScript,不能使用第三方库,这个界面在手机上正常显示。已提供框架如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <!--code here-->
  <title>demo</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    .head, li div {
      display: inline-block;
      width: 70px;
      text-align: center;
    }
    li .id, li .sex, .id, .sex {
      width: 15px;
    }
    li .name, .name {
      width: 40px;
    }
    li .tel, .tel {
      width: 90px;
    }
    li .del, .del {
      width: 15px;
    }
    ul {
      list-style: none;
    }
    .user-delete {
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div id="J_container">
    <div class="record-head">
      <div class="head id">序号</div><div class="head name">姓名</div><div class="head sex">性别</div><div class="head tel">电话号码</div><div class="head province">省份</div><div class="head">操作</div>
    </div>
    <ul id="J_List">
      <li><div class="id">1</div><div class="name">张三</div><div class="sex">男</div><div class="tel">13788888888</div><div class="province">浙江</div><div class="user-delete">删除</div></li>
      <li><div class="id">2</div><div class="name">李四</div><div class="sex">女</div><div class="tel">13788887777</div><div class="province">四川</div><div class="user-delete">删除</div></li>
      <li><div class="id">3</div><div class="name">王二</div><div class="sex">男</div><div class="tel">13788889999</div><div class="province">广东</div><div class="user-delete">删除</div></li>
    </ul>
  </div>
<script>
// 此处也可换成ES6的写法
function Contact(){
    this.init();
}   
// your code here 
</script>
</body>
</html>

心里的小九九

我的解题思路

我的解题代码

和在网上提交的代码有一些不同,写好测试好之后发现时间就剩几分钟了,就先把代码保存了,然后回到本地IDE去做一些调整,就是让代码看起来舒服些,好看些。改了之后如下

window.onload = function init(){
  var btnsForDel = document.getElementsByClassName("user-delete");
  initClickEvent(btnsForDel);
}

function initClickEvent(btnsForDel){
  var index=0;
  for (var i = 0 ; i < btnsForDel.length; i++){
      btnsForDel[i].onclick = function (){
       index = (this.parentNode.children[0].innerHTML);
       var rowForDel = document.getElementById("J_List").children[index-1].remove();
       freshListNo();
       index = 0;
     }
   }
}
function freshListNo(){
    //现获取到列表,再获取其中每个对象的ID
    //也可以直接查找ClassName为ID的div,但在有多个列表时不适用
   var list = document.getElementById("J_List").children;
   for (var i= 0 ; i < list.length ; i++){
    list[i].getElementsByClassName("id")[0].innerHTML = i + 1;
   }
}

考虑不周

咖啡厅的环境还是很棒的,店里生意挺热闹,还好顾客的声音都不是很大,然后呢,时间很快就过了,再回去测验页面发现保存的代码已经提交。松了口气,就开始发呆了,虽然我也不知道为什么紧张,开始看前面有个小姐姐在玩儿手机,小姐姐手很好看(微笑脸),忽然想到了那句“在手机上能正常显示”(微笑脸),忽然明白了什么,重点不是显示,重点是在手机上使用,那,,意思不就是要用手指触摸时间,不是鼠标点击啊,哪儿来的onclick,不存在的,全程微笑脸_
滚去做了更改

// your code here 
window.onload = function init(){
  var btnsForDel = document.getElementsByClassName("user-delete");
  initTouchEvent(btnsForDel);
}

function initTouchEvent(btnsForDel){
  var index = 0;
  for (var i = 0 ; i < btnsForDel.length; i++){
      btnsForDel[i].addEventListener("touchstart",touch,false);
   }
  function touch(event){
      var event = event || window.event;
      index = (this.parentNode.children[0].innerHTML);
      var rowForDel = document.getElementById("J_List").children[index-1].remove();
      freshListNo();
      index = 0;
   }
}
function freshListNo(){
    //现获取到列表,再获取其中每个对象的ID
    //也可以直接查找ClassName为ID的div,但在有多个列表时不适用
   var list = document.getElementById("J_List").children;
   for (var i= 0 ; i < list.length ; i++){
    list[i].getElementsByClassName("id")[0].innerHTML = i + 1;
   }
}

这个时候在网页中点击是无效的,用Chrome模拟手机测试,点击可以正常删除信息,并重新编号。所以如果要在PC和手机上都能操作的话,还需要在初始化删除事件之前对设备进行判断,思路是使用navigator.userAgent获取到用户平台信息,判断PC(包括MAC和windows)还是移动端(iPhone、Android等),不需要再对平台类型进行判断,因为click和touch事件解析方式是浏览器相关。

写到这儿里的时候,已经是越想越多了,难道是咖啡屋环境太轻松,又想起来一个很重要的点,印象中题目中有要求“面向对象”,然鹅我解题的时候并没有注意这个点,挥泪离开~
----2017-8-20 记于某咖啡屋

上一篇下一篇

猜你喜欢

热点阅读