JavaScript组件开发之输入框加候选框


Posted in Javascript onMarch 10, 2017

1.兼容ie8 主要是事件兼容

var EventUtil = {
   on:function(elem,type,handler){
    if(elem.addEventListener){
     elem.addEventListener(type,handler,false);
    }else if(elem.attachEvent){
     elem.attachEvent("on"+type,handler);
    }
   },
   getEvent:function(event){
    return event||window.event;
   },
   getTarget:function(event){
    return event.target||event.srcElement;
   },
   getCharCode:function(event){
    if(typeof event.handler == "number"){
     return event.charCode;
    }else{
     return event.keyCode;
    }
   }
  }

2.对于候选框里面的内容使用事件代理,以及点击空白处消失

EventUtil.on(document.body,'click',function(e){
   stopPropagation(e);
   if(EventUtil.getTarget(e).nodeName=='BODY'){
    datalist.style.visibility = 'hidden';
    datalist.innerHTML ='';
   }
   if(EventUtil.getTarget(e).nodeName == "LI"){
    input.value = EventUtil.getTarget(e).innerHTML;
    datalist.style.visibility = 'hidden';
    datalist.innerHTML ='';
   }
  })

3.兼容模式下的防止冒泡

function stopPropagation(e){
   e = window.event||e;
   if(document.all){
    e.cancelBubble = true;
   }else{
    e.stopPropagation();
   }
  }

4.效果图

JavaScript组件开发之输入框加候选框 

5.完整代码

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title></title>
  <style media="screen">
   html,body{margin: 0;padding: 0;height: 100%;width: 100%;}
   input{
    width: 200px;
    border:1px solid grey;
    padding: 0 2px;
    line-height: 1.5rem;
    box-sizing: border-box;
    outline: none;
   }
   ul{
    margin:0;
    width: 200px;
    padding: 0;
    list-style: none;
    box-sizing: border-box;
    padding: 1px;
    border:1px solid;
    border-color: grey;
    visibility: hidden;
   }
   li{
    line-height: 1.5rem;
    padding: 0 0 0 1px;
   }
   li:hover{
    background-color: grey;
   }
   .section{
    top:30%;
    left:50%;
    position: absolute;
    margin-left: -100px;
   }
  </style>
 </head>
 <body>
 <div class="section">
   <input id="search"/>
   <ul id="datalist">
   </ul>
 </div>
 </body>
 <script type="text/javascript">
  var EventUtil = {
   on:function(elem,type,handler){
    if(elem.addEventListener){
     elem.addEventListener(type,handler,false);
    }else if(elem.attachEvent){
     elem.attachEvent("on"+type,handler);
    }
   },
   getEvent:function(event){
    return event||window.event;
   },
   getTarget:function(event){
    return event.target||event.srcElement;
   },
   getCharCode:function(event){
    if(typeof event.handler == "number"){
     return event.charCode;
    }else{
     return event.keyCode;
    }
   }
  }
  function stopPropagation(e){
   e = window.event||e;
   if(document.all){
    e.cancelBubble = true;
   }else{
    e.stopPropagation();
   }
  }
  var input = document.getElementById('search');
  var datalist = document.getElementById('datalist');
  var list_array = ['aa','aab','abc'];
  function generatelist(array){
   var _innerHTML = '';
   for (var i = 0; i < array.length; i++) {
    _innerHTML += '<li>'+array[i]+'</li>';
   }
   datalist.innerHTML = _innerHTML;
  }
  function findInArray(s){
   var filter_array = [];
   if(s!=''){
    for (var i = 0; i < list_array.length; i++) {
     if(list_array[i].indexOf(s)===0){
      filter_array.push(list_array[i])
     }
    }
   }
   return filter_array;
  }
  input.onkeyup = function(){
   var new_array = findInArray(this.value);
   generatelist(new_array);
   if(new_array.length>0){
    setTimeout(function(){datalist.style.visibility = 'visible';},0);
   }else{
    setTimeout(function(){datalist.style.visibility = 'hidden';},0);
   }
  }
  EventUtil.on(document.body,'click',function(e){
   stopPropagation(e);
   if(EventUtil.getTarget(e).nodeName=='BODY'){
    datalist.style.visibility = 'hidden';
    datalist.innerHTML ='';
   }
   if(EventUtil.getTarget(e).nodeName == "LI"){
    input.value = EventUtil.getTarget(e).innerHTML;
    datalist.style.visibility = 'hidden';
    datalist.innerHTML ='';
   }
  })
 </script>
</html>
Javascript 相关文章推荐
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
Nov 25 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
js Canvas绘制圆形时钟效果
Feb 17 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
Feb 22 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
Jul 10 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 Javascript
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
原生javascript移动端滑动banner效果
Mar 10 #Javascript
jQuery弹出窗口简单实现代码
Mar 09 #Javascript
JavaScript实现弹窗效果代码分析
Mar 09 #Javascript
详解Vue方法与事件
Mar 09 #Javascript
Vue实现自带的过滤器实例
Mar 09 #Javascript
Vue中fragment.js使用方法详解
Mar 09 #Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 #Javascript
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
Python 字符串大小写转换的简单实例
2017/01/21 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
python实现UDP协议下的文件传输
2020/03/20 Python
python如何停止递归
2020/09/09 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
欢送退休感言
2014/02/08 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
农村改厕实施方案
2014/03/22 职场文书
授权收款委托书
2014/09/23 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
家长会欢迎词
2015/01/23 职场文书