JS实现联想、自动补齐国家或地区名称的功能


Posted in Javascript onJuly 07, 2020

1.JS部分

function autocomplete(inp, arr) {
 /*函数主要有两个参数:文本框元素和自动补齐的完整数据*/
 var currentFocus;
 /* 监听 - 在写入时触发 */
 inp.addEventListener("input", function(e) {
   var a, b, i, val = this.value;
   /*关闭已经打开的自动完成值列表*/
   closeAllLists();
   if (!val) { return false;}
   currentFocus = -1;
   /*创建列表*/
   a = document.createElement("DIV");
   a.setAttribute("id", this.id + "autocomplete-list");
   a.setAttribute("class", "autocomplete-items");
   /*添加 DIV 元素*/
   this.parentNode.appendChild(a);
   /*循环数组...*/
   for (i = 0; i < arr.length; i++) {
    /*检查选项是否以与文本字段值相同的字母开头*/
    if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
     /*为匹配元素创建 DIV*/
     b = document.createElement("DIV");
     /*使匹配字母变粗体*/
     b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
     b.innerHTML += arr[i].substr(val.length);
     /*insert a input field that will hold the current array item's value:*/
     b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";
     /*execute a function when someone clicks on the item value (DIV element):*/
     b.addEventListener("click", function(e) {
       /*insert the value for the autocomplete text field:*/
       inp.value = this.getElementsByTagName("input")[0].value;
       /*close the list of autocompleted values,
       (or any other open lists of autocompleted values:*/
       closeAllLists();
     });
     a.appendChild(b);
    }
   }
 });
 /*execute a function presses a key on the keyboard:*/
 inp.addEventListener("keydown", function(e) {
   var x = document.getElementById(this.id + "autocomplete-list");
   if (x) x = x.getElementsByTagName("div");
   if (e.keyCode == 40) {
    /*If the arrow DOWN key is pressed,
    increase the currentFocus variable:*/
    currentFocus++;
    /*and and make the current item more visible:*/
    addActive(x);
   } else if (e.keyCode == 38) { //up
    /*If the arrow UP key is pressed,
    decrease the currentFocus variable:*/
    currentFocus--;
    /*and and make the current item more visible:*/
    addActive(x);
   } else if (e.keyCode == 13) {
    /*If the ENTER key is pressed, prevent the form from being submitted,*/
    e.preventDefault();
    if (currentFocus > -1) {
     /*and simulate a click on the "active" item:*/
     if (x) x[currentFocus].click();
    }
   }
 });
 function addActive(x) {
  /*a function to classify an item as "active":*/
  if (!x) return false;
  /*start by removing the "active" class on all items:*/
  removeActive(x);
  if (currentFocus >= x.length) currentFocus = 0;
  if (currentFocus < 0) currentFocus = (x.length - 1);
  /*add class "autocomplete-active":*/
  x[currentFocus].classList.add("autocomplete-active");
 }
 function removeActive(x) {
  /*a function to remove the "active" class from all autocomplete items:*/
  for (var i = 0; i < x.length; i++) {
   x[i].classList.remove("autocomplete-active");
  }
 }
 function closeAllLists(elmnt) {
  /*close all autocomplete lists in the document,
  except the one passed as an argument:*/
  var x = document.getElementsByClassName("autocomplete-items");
  for (var i = 0; i < x.length; i++) {
   if (elmnt != x[i] && elmnt != inp) {
    x[i].parentNode.removeChild(x[i]);
   }
  }
 }
 /*execute a function when someone clicks in the document:*/
 document.addEventListener("click", function (e) {
   closeAllLists(e.target);
   });
}

/*数组 - 包含所有国家或地区名*/
var countries = ["Afghanistan","Albania","Algeria","Andorra","Angola","Anguilla","Antigua & Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia & Herzegovina","Botswana","Brazil","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central Arfrican Republic","Chad","Chile","China","Colombia","Congo","Cook Islands","Costa Rica","Cote D Ivoire","Croatia","Cuba","Curacao","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Polynesia","French West Indies","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guam","Guatemala","Guernsey","Guinea","Guinea Bissau","Guyana","Haiti","Honduras","Hong Kong China","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau China","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Mauritania","Mauritius","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauro","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","North Korea","Norway","Oman","Pakistan","Palau","Palestine","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russia","Rwanda","Saint Pierre & Miquelon","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Korea","South Sudan","Spain","Sri Lanka","St Kitts & Nevis","St Lucia","St Vincent","Sudan","Suriname","Swaziland","Sweden","Switzerland","Syria","Taiwan China","Tajikistan","Tanzania","Thailand","Timor L'Este","Togo","Tonga","Trinidad & Tobago","Tunisia","Turkey","Turkmenistan","Turks & Caicos","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States of America","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Virgin Islands (US)","Yemen","Zambia","Zimbabwe"];

/*传递参数*/
autocomplete(document.getElementById("myInput"), countries);

2.CSS部分

* { box-sizing: border-box; }
body {
 font: 16px Arial; 
}
.autocomplete {
 /*the container must be positioned relative:*/
 position: relative;
 display: inline-block;
}
input {
 border: 1px solid transparent;
 background-color: #f1f1f1;
 padding: 10px;
 font-size: 16px;
}
input[type=text] {
 background-color: #f1f1f1;
 width: 100%;
}
input[type=submit] {
 background-color: DodgerBlue;
 color: #fff;
}
.autocomplete-items {
 position: absolute;
 border: 1px solid #d4d4d4;
 border-bottom: none;
 border-top: none;
 z-index: 99;
 /*position the autocomplete items to be the same width as the container:*/
 top: 100%;
 left: 0;
 right: 0;
}
.autocomplete-items div {
 padding: 10px;
 cursor: pointer;
 background-color: #fff; 
 border-bottom: 1px solid #d4d4d4; 
}
.autocomplete-items div:hover {
 /*when hovering an item:*/
 background-color: #e9e9e9; 
}
.autocomplete-active {
 /*when navigating through the items using the arrow keys:*/
 background-color: DodgerBlue !important; 
 color: #ffffff; 
}

3.HTML部分

<!-- 关闭自带的自动补全功能 -->
<form autocomplete="off" action="/action_page.php">
 <div class="autocomplete" style="width:300px;">
  <input id="myInput" type="text" name="myCountry" placeholder="输入国家或地区英文名...">
 </div>
 <input type="submit">
</form>

4.效果图

JS实现联想、自动补齐国家或地区名称的功能

以上就是JS实现联想、自动补齐国家或地区名称的功能的详细内容,更多关于JS 联想、自动补齐功能的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
js中数组的常用方法小结
Dec 30 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
JavaScript继承与多继承实例分析
May 26 Javascript
微信小程序网络封装(简单高效)
Aug 06 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
JS实现计算小于非负数n的素数的数量算法示例
Feb 26 Javascript
微信小程序实现图片选择并预览功能
Jul 25 Javascript
vue 组件内获取actions的response方式
Nov 08 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
jQuery 动态粒子效果示例代码
Jul 07 #jQuery
Electron实现应用打包、自动升级过程解析
Jul 07 #Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 #Javascript
基于javascript处理nginx请求过程详解
Jul 07 #Javascript
vue-i18n实现中英文切换的方法
Jul 06 #Javascript
vue 实现动态路由的方法
Jul 06 #Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 #Javascript
You might like
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
一个PHP+MSSQL分页的例子
2006/10/09 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
Prototype Date对象 学习
2009/07/12 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
详解Vue之事件处理
2020/07/10 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
python转换摩斯密码示例
2014/02/16 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
python模糊图片过滤的方法
2018/12/14 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
一套软件开发工程师笔试题
2015/05/18 面试题
教师查摆问题及整改措施
2014/10/11 职场文书
学习心理学的体会
2014/11/07 职场文书
团日活动总结格式
2015/05/11 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
python入门学习关于for else的特殊特性讲解
2021/11/20 Python