最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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>

相關文章

  • require.js與bootstrap結合實現簡單的頁面登錄和頁面跳轉功能

    require.js與bootstrap結合實現簡單的頁面登錄和頁面跳轉功能

    這篇文章主要介紹了require.js與bootstrap結合實現簡單的頁面登錄和頁面跳轉功能,需要的朋友可以參考下
    2017-05-05
  • JS回調函數簡單用法示例

    JS回調函數簡單用法示例

    這篇文章主要介紹了JS回調函數簡單用法,結合實例形式分析了js回調函數的定義與簡單使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • js驗證上傳圖片的方法

    js驗證上傳圖片的方法

    這篇文章主要介紹了js驗證上傳圖片的方法,可對上傳圖片的類型、大小等進行限制,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • javascript replace()用法詳解附實例代碼

    javascript replace()用法詳解附實例代碼

    在javascript中,String的函數replace()簡直太讓人喜愛了。它靈活而強大的字符替換處理能力,讓我不禁想向大家介紹它。
    2008-10-10
  • javascript IE中的DOM ready應用技巧

    javascript IE中的DOM ready應用技巧

    當我們想在頁面加載之后執(zhí)行某個函數,肯定會想到onload了 但onload在瀏覽器看來,就是頁面上的東西全部都加載完畢后才能發(fā)生,但那就為時已晚了。
    2008-07-07
  • js實現前端圖片上傳即時預覽功能

    js實現前端圖片上傳即時預覽功能

    這篇文章主要為大家詳細介紹了js實現前端圖片即時預覽功能,本地預覽功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺談typescript中keyof與typeof操作符用法

    淺談typescript中keyof與typeof操作符用法

    本文主要介紹了typescript中keyof與typeof操作符用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • JavaScript中window和document用法詳解

    JavaScript中window和document用法詳解

    這篇文章主要介紹了JavaScript中window和document用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 使用JavaScript輕松實現拖拽功能

    使用JavaScript輕松實現拖拽功能

    這篇文章主要介紹了使用JavaScript輕松實現拖拽功能,讓你的網頁動起來,文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 學習掌握JavaScript中this的使用技巧

    學習掌握JavaScript中this的使用技巧

    這篇文章主要幫助大家學習并熟練掌握JavaScript中this的使用技巧,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

慈溪市| 九龙坡区| 大理市| 濮阳市| 大英县| 桂东县| 仁怀市| 固始县| 三台县| 龙山县| 新干县| 北辰区| 资中县| 安溪县| 广西| 焉耆| 黄石市| 瑞昌市| 西青区| 四平市| 巴东县| 曲水县| 平果县| 普洱| 凤冈县| 汾西县| 安溪县| 体育| 雷州市| 汉川市| 伊川县| 淳安县| 乳山市| 堆龙德庆县| 鹤山市| 宣恩县| 仪征市| 始兴县| 垦利县| 赤城县| 磴口县|