欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript組件開發(fā)之輸入框加候選框

 更新時間:2017年03月10日 08:39:13   作者:浪漫不屬意  
本文給大家分享基于js組件開發(fā)的輸入框加候選框的實例代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的的朋友參考下

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.對于候選框里面的內(nèi)容使用事件代理,以及點擊空白處消失

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.效果圖

這里寫圖片描述 

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>

相關(guān)文章

  • JS實現(xiàn)網(wǎng)站換膚

    JS實現(xiàn)網(wǎng)站換膚

    這篇文章主要為大家詳細介紹了JS實現(xiàn)網(wǎng)站換膚,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript實現(xiàn)繼承的7種方式總結(jié)

    JavaScript實現(xiàn)繼承的7種方式總結(jié)

    用官方點的話講繼承是面向?qū)ο笕筇卣髦?,可以使得子類具有父類的屬性和方法,同時還可以在子類中重新定義以及追加屬性和方法。本文整理了JavaScript實現(xiàn)繼承的7種方式,需要的可以了解一下
    2023-04-04
  • 淺析BootStrap模態(tài)框的使用(經(jīng)典)

    淺析BootStrap模態(tài)框的使用(經(jīng)典)

    Bootstrap Modals(模態(tài)框)是使用定制的 Jquery 插件創(chuàng)建的。本文給大家介紹BootStrap模態(tài)框的使用,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • 淺談JS的基礎(chǔ)類型與引用類型

    淺談JS的基礎(chǔ)類型與引用類型

    下面小編就為大家?guī)硪黄獪\談JS的基礎(chǔ)類型與引用類型。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • JS模擬Dialog彈出浮動框效果代碼

    JS模擬Dialog彈出浮動框效果代碼

    這篇文章主要介紹了JS模擬Dialog彈出浮動框效果代碼,涉及JavaScript可拖動窗口的創(chuàng)建及布局相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 再談javascript常見錯誤及解決方法

    再談javascript常見錯誤及解決方法

    下面小編就為大家?guī)硪黄僬刯avascript常見錯誤及解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 子父窗口之間的操作

    子父窗口之間的操作

    子父窗口之間的操作...
    2006-07-07
  • webuploader實現(xiàn)上傳圖片到服務(wù)器功能

    webuploader實現(xiàn)上傳圖片到服務(wù)器功能

    這篇文章主要為大家詳細介紹了webuploader實現(xiàn)上傳圖片到服務(wù)器功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • websocket4.0+typescript 實現(xiàn)熱更新的方法

    websocket4.0+typescript 實現(xiàn)熱更新的方法

    這篇文章主要介紹了websocket4.0+typescript 實現(xiàn)熱更新的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Ajax 加載數(shù)據(jù) 練習(xí)代碼

    Ajax 加載數(shù)據(jù) 練習(xí)代碼

    這篇文章主要介紹了Ajax 加載數(shù)據(jù),主要是為了查詢表的顯示,不用嵌入php通過ajax調(diào)用,現(xiàn)在手機端的更多顯示功能都是通過ajax實現(xiàn)的
    2017-01-01

最新評論