• JS实现联想自动补齐功能


      1 <!DOCTYPE HTML>
      2 <html>
      3    <head>
      4       <meta charset = "utf-8">
      5       <title>JS实现联想自动补齐功能</title>
      6       <style>
      7          * { box-sizing: border-box; }
      8          #container{
      9             
     10             position:relative;
     11             top:50px;
     12             left:30%;
     13           /*为了好看一点定个位*/
     14            
     15         }
     16         form{
     17              padding:6px;
     18              position:absolute;
     19              top:200px;
     20              left:50px;
     21        }
     22         #search{
     23          border: 1px solid transparent;
     24          background-color: #f1f1f1;
     25          padding: 10px;
     26          font-size: 16px;
     27       }
     28         button{
     29             background-color: DodgerBlue;
     30             color: #fff;
     31             width:60px;
     32             height:40px;
     33             padding:10px;
     34       }
     35        //好了虽然丑了点,更能还是有了
     36      .listclass {
     37          position: absolute;
     38          border: 1px solid #d4d4d4;
     39          border-bottom: none;
     40          border-top: none;
     41          z-index: 99;
     42   
     43          top: 100%;
     44          left: 0;
     45          right: 0;
     46        }
     47       .listclass div {
     48           padding: 10px;
     49           cursor: pointer;
     50           background-color: #fff; 
     51           border-bottom: 1px solid #d4d4d4; 
     52        }
     53          .listclass div:hover {
     54   
     55           background-color: #e9e9e9; 
     56       }
     57        .listactive {
     58   
     59            background-color: DodgerBlue !important; 
     60            color: #ffffff; 
     61       }
     62       </style>
     63    </head>
     64    <body>
     65      <div id="container">
     66      <h3>HTML5的表单是有自动不全功能的,(所以可以只做输入和数据对比过滤就可以)<h3>
     67      <h3>这里我们先把补齐更能关闭了用autocomplete属性来实现</h3>
     68      <form autocomplete="off" action="https://www.baidu.com/s?"  id>
     69           
     70           <div  >
     71                 <input id="search" name="search" placeholder="输入国家或者地区的英文名">
     72                 <button type="submit" >提交</button>
     73           </div>
     74           
     75      </form>
     76      </div>
     77      <script>
     78         //筛选函数
     79         function search(arr){
     80          //将数据传入,预处理一下
     81          
     82          var currentFocus;//用来计算输入几个
     83          var inp=document.getElementById("search");
     84          //当输入时,开始筛选,注册一个输入
     85          inp.addEventListener("input",function(event){
     86           var a,b,i,val=this.value;
     87           //当失去焦点后关闭下拉列表
     88           closeAll();
     89           if(!val){return false;}
     90           currentFocus=-1;
     91           //把数据例表搞出来
     92           a=document.createElement("div");
     93           a.setAttribute("id",this.id+"list");
     94           a.setAttribute("class","listclass");
     95           //添加这个div
     96           inp.parentNode.appendChild(a);
     97           //开始循环匹配数据
     98           for(i=0;i<arr.length;i++){
     99             //这个只能顺序匹配,匹配第一个后第二个有效继续,无效为空,
    100             if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
    101               b = document.createElement("div");
    102               b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
    103               b.innerHTML += arr[i].substr(val.length);
    104               b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";
    105               b.addEventListener("click", function(e) {
    106               
    107               inp.value = this.getElementsByTagName("input")[0].value;
    108               console.log(this)
    109               closeAll();
    110           });
    111          a.appendChild(b);
    112     }
    113   }
    114 });
    115      //按键按下时将数据放到输入框
    116        inp.addEventListener("keydown", function(e) {
    117           var x = document.getElementById(this.id + "list");
    118           if (x) x = x.getElementsByTagName("div");
    119           if (e.keyCode == 40) {
    120           currentFocus++;
    121           addActive(x);
    122       } else if (e.keyCode == 38) {
    123          currentFocus--;
    124          addActive(x);
    125       } else if (e.keyCode == 13) {
    126          e.preventDefault();
    127         if (currentFocus > -1) {
    128           
    129           if (x) x[currentFocus].click();
    130         }
    131       }
    132   });
    133       function addActive(x) {
    134     
    135     if (!x) return false;
    136   
    137     removeActive(x);
    138     if (currentFocus >= x.length) currentFocus = 0;
    139     if (currentFocus < 0) currentFocus = (x.length - 1);
    140    
    141     x[currentFocus].classList.add("listactive");
    142   }
    143 //输入框删除已经输入的字符,往后匹配
    144   function removeActive(x) {
    145     
    146     for (var i = 0; i < x.length; i++) {
    147       x[i].classList.remove("listactive");
    148     }
    149   }
    150  //失去焦点就关闭列表
    151   function closeAll(elmnt) {
    152     //全部删去
    153     var x = document.getElementsByClassName("listclass");
    154     for (var i = 0; i < x.length; i++) {
    155       if (elmnt != x[i] && elmnt != inp) {
    156         x[i].parentNode.removeChild(x[i]);
    157       }
    158     }
    159   }
    160   //点击列表外也删除
    161   document.addEventListener("click", function (e) {
    162       closeAll(e.target);
    163       });  
    164          
    165                
    166       }
    167 
    168 //数据
    169  var countries = ["Afghanistan","Albania","Algeria","Andorra","Angola","Anguilla","Antigua & 
    170 
    171 Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bang
    172 
    173 ladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia & 
    174 
    175 Herzegovina","Botswana","Brazil","British Virgin Islands","Brunei","Bulgaria","Burkina 
    176 
    177 Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central Arfrican 
    178 
    179 Republic","Chad","Chile","China","Colombia","Congo","Cook Islands","Costa Rica","Cote D 
    180 
    181 Ivoire","Croatia","Cuba","Curacao","Cyprus","Czech 
    182 
    183 Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El 
    184 
    185 Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands","Faroe 
    186 
    187 Islands","Fiji","Finland","France","French Polynesia","French West 
    188 
    189 Indies","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Gu
    190 
    191 am","Guatemala","Guernsey","Guinea","Guinea Bissau","Guyana","Haiti","Honduras","Hong Kong 
    192 
    193 China","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of 
    194 
    195 Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo",
    196 
    197 "Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithua
    198 
    199 nia","Luxembourg","Macau 
    200 
    201 China","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall 
    202 
    203 Islands","Mauritania","Mauritius","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro",
    204 
    205 "Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauro","Nepal","Netherlands","Netherlands 
    206 
    207 Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","North 
    208 
    209 Korea","Norway","Oman","Pakistan","Palau","Palestine","Panama","Papua New 
    210 
    211 Guinea","Paraguay","Peru","Philippines","Poland","Portugal","Puerto 
    212 
    213 Rico","Qatar","Reunion","Romania","Russia","Rwanda","Saint Pierre & Miquelon","Samoa","San 
    214 
    215 Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra 
    216 
    217 Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South 
    218 
    219 Korea","South Sudan","Spain","Sri Lanka","St Kitts & Nevis","St Lucia","St 
    220 
    221 Vincent","Sudan","Suriname","Swaziland","Sweden","Switzerland","Syria","Taiwan 
    222 
    223 China","Tajikistan","Tanzania","Thailand","Timor L'Este","Togo","Tonga","Trinidad & 
    224 
    225 Tobago","Tunisia","Turkey","Turkmenistan","Turks & Caicos","Tuvalu","Uganda","Ukraine","United Arab 
    226 
    227 Emirates","United Kingdom","United States of America","Uruguay","Uzbekistan","Vanuatu","Vatican 
    228 
    229 City","Venezuela","Vietnam","Virgin Islands (US)","Yemen","Zambia","Zimbabwe"];
    230 
    231 /*运行一下函数*/
    232 search(countries);
    233      </script>
    234    </body>
    235 </html>
  • 相关阅读:
    广义mandelbrot集,使用python的matplotlib绘制,支持放大缩小
    cs229 斯坦福机器学习笔记(一)-- 入门与LR模型
    Scrapy研究探索(三)——Scrapy核心架构与代码执行分析
    matlab各类数据l图像之间的转化
    开源重磅,java内容管理系统CMS,点击就可以编辑,保存,轻松构建自己的站点
    Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决
    03002_MySQL数据库的安装和配置
    [.Net Core] 简单使用 Mvc 内置的 Ioc
    Asp.Net MVC中Action跳转
    EF的增删改查
  • 原文地址:https://www.cnblogs.com/weblife/p/10250972.html
Copyright © 2020-2023  润新知