js自动补全
<!doctype html> <html> <style> body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; } .auto_hidden { width: 204px; border-top: 1px solid #333; border-bottom: 1px solid #333; border-left: 1px solid #333; border-right: 1px solid #333; position: absolute; display: none; } .auto_show { width: 204px; border-top: 1px solid #333; border-bottom: 1px solid #333; border-left: 1px solid #333; border-right: 1px solid #333; position: absolute; z-index: 9999; /* 设置对象的层叠顺序 */ display: block; } .auto_onmouseover { color: #ffffff; background-color: highlight; width: 100%; } .auto_onmouseout { color: #000000; width: 100%; background-color: #ffffff; } </style> <script language="javascript"> <!-- var $ = function(id) { return "string" == typeof id ? document.getElementById(id) : id; } var Bind = function(object, fun) { return function() { return fun.apply(object, arguments); } } function AutoComplete(obj, autoObj, arr) { this.obj = $(obj); //输入框 this.autoObj = $(autoObj);//DIV的根节点 this.value_arr = arr; //不要包含重复值 this.index = -1; //当前选中的DIV的索引 this.search_value = ""; //保存当前搜索的字符 } AutoComplete.prototype = { //初始化DIV的位置 init : function() { this.autoObj.style.left = this.obj.offsetLeft + "px"; this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight + "px"; this.autoObj.style.width = this.obj.offsetWidth - 2 + "px";//减去边框的长度2px }, //删除自动完成需要的所有DIV deleteDIV : function() { while (this.autoObj.hasChildNodes()) { this.autoObj.removeChild(this.autoObj.firstChild); } this.autoObj.className = "auto_hidden"; }, //设置值 setValue : function(_this) { return function() { _this.obj.value = this.seq; _this.autoObj.className = "auto_hidden"; } }, //模拟鼠标移动至DIV时,DIV高亮 autoOnmouseover : function(_this, _div_index) { return function() { _this.index = _div_index; var length = _this.autoObj.children.length; for ( var j = 0; j < length; j++) { if (j != _this.index) { _this.autoObj.childNodes[j].className = 'auto_onmouseout'; } else { _this.autoObj.childNodes[j].className = 'auto_onmouseover'; } } } }, //更改classname changeClassname : function(length) { for ( var i = 0; i < length; i++) { if (i != this.index) { this.autoObj.childNodes[i].className = 'auto_onmouseout'; } else { this.autoObj.childNodes[i].className = 'auto_onmouseover'; this.obj.value = this.autoObj.childNodes[i].seq; } } }, //响应键盘 pressKey : function(event) { var length = this.autoObj.children.length; //光标键"↓" if (event.keyCode == 40) { ++this.index; if (this.index > length) { this.index = 0; } else if (this.index == length) { this.obj.value = this.search_value; } this.changeClassname(length); } //光标键"↑" else if (event.keyCode == 38) { this.index--; if (this.index < -1) { this.index = length - 1; } else if (this.index == -1) { this.obj.value = this.search_value; } this.changeClassname(length); } //回车键 else if (event.keyCode == 13) { this.autoObj.className = "auto_hidden"; this.index = -1; } else { this.index = -1; } }, //程序入口 start : function(event) { if (event.keyCode != 13 && event.keyCode != 38 && event.keyCode != 40) { this.init(); this.deleteDIV(); this.search_value = this.obj.value; var valueArr = this.value_arr; valueArr.sort(); if (this.obj.value.replace(/(^\s*)|(\s*$)/g, '') == "") { return; }//值为空,退出 try { var reg = new RegExp("(" + this.obj.value + ")", "i"); } catch (e) { return; } var div_index = 0;//记录创建的DIV的索引 for ( var i = 0; i < valueArr.length; i++) { if (reg.test(valueArr[i])) { var div = document.createElement("div"); div.className = "auto_onmouseout"; div.seq = valueArr[i]; div.onclick = this.setValue(this); div.onmouseover = this.autoOnmouseover(this, div_index); div.innerHTML = valueArr[i].replace(reg, "<strong>$1</strong>");//搜索到的字符粗体显示 this.autoObj.appendChild(div); this.autoObj.className = "auto_show"; div_index++; } } } this.pressKey(event); window.onresize = Bind(this, function() { this.init(); }); } } //--> </SCRIPT> <body> <h1 align="center">自动完成函数(Autocomplete Function)</h1> <div align="center"> <input type="text" style="width: 300px; height: 20px; font-size: 14pt;" id="o" onkeyup="autoComplete.start(event)"> </div> <div class="auto_hidden" id="auto"> <!--自动完成 DIV--> </div> <script> var autoComplete = new AutoComplete('o', 'auto', [ 'b0', 'b12', 'b22', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b2', 'abd', 'ab', 'acd', 'accd', 'b1', 'cd', 'ccd', 'cbcv', 'cxf' ]); </SCRIPT> </body> </html>
;
js自动补全的更多相关文章
- js自动补全空白列(即缺少td的列)
//自动补全空白列 var rows = document.getElementById("gridTable").rows; //行对象 var allcells = rows[ ...
- js自动补全实例
var oInputField ,oPopDiv , oColorsUl,aColors; //初始化变量 function initVars(modelId,divId,ulId){ oInputF ...
- 原创js自动补全---auotocomplete
if ($("input.autocomplete_input").length > 0) { $("input.autocomplete_input") ...
- Visual Studio Code使用typings拓展自动补全功能
转自:http://blog.csdn.net/liyijun4114/article/details/51658087 参考来源: 官方介绍: https://code.visualstudio.c ...
- js邮箱自动补全
邮箱自动补全js和jQuery html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- jquery input 搜索自动补全、typeahead.js
最近做个一个功能需要用到自动补全,然后在网上找了很久,踩了各种的坑 最后用typeahead.js这个插件,经过自己的测试完美实现 使用方法:在页面中引入jquery.jquery.typeahead ...
- jQuery搜索框自动补全功能插件实现-autocomplete.js
最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...
- jQuery 邮箱下拉列表自动补全
综述 我想大家一定见到过,在某个网站填写邮箱的时候,还没有填写完,就会出现一系列下拉列表,帮你自动补全邮箱的功能.现在我们就用jQuery来实现一下. 博主原创代码,如有代码写的不完善的地方还望大家多 ...
- jQuery AutoComplete 自动补全
jQuery.AutoComplete是一个基于jQuery的自动补全插件.借助于jQuery优秀的跨浏览器特性,可以兼容Chrome/IE/Firefox/Opera/Safari等多种浏览器. 特 ...
随机推荐
- RedHat虚拟机相关操作
在VM虚拟机中安装完Redhat系统之后 如果需要用secureCRT连接linux系统的话 操作步骤如下: 1.进入linux系统,在终端输入ifconfig(注意,不是windows的ipconf ...
- 【共享单车】—— React后台管理系统开发手记:员工管理之增删改查
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- Nodejs扩展,实现消息弹窗
參考https://github.com/olalonde/node-notify的实现 模块的C++代码 node_gtknotify.cc #include <v8.h> #inclu ...
- 性能测试篇 :Jmeter HTTP代理服务器录制压力脚本
转载:http://www.cnblogs.com/chengtch/p/6067915.html 从loadrunner到jmeter,录制压力测试脚本好像都只支持IE,近来才知道jmeter还有自 ...
- Gauge安装
Gauge系列推荐:https://blog.csdn.net/column/details/20089.html Gauge是一种轻量级的跨平台测试自动化工具,可以以业务语言编写测试用例. 安装 下 ...
- My sql 实用教程
http://wenku.baidu.com/link?url=uwWWeGTZU61MQSSArf2pYRd4jPd7k7gNsx75KxEUKO1MlMLAAFiIF-fus3CY4RLyyzbZ ...
- samba基本配置
安装启动不用说了 vim /etc/samba/smb.conf workgroup = WORKGROUP server string = Samba Server %vnetbios name = ...
- 无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)
近期要在公司的会议上演示App,须要在投影仪上显示出来给大家演示.因为投影仪不是智能投影仪,仅仅能将App先投影到自己的笔记本上.然后再将笔记本上的内容投影到投影仪上.该App是个游戏,实时交互性比較 ...
- PHP接收和发送XML数据(json也通用)
一.接收xml数据, 使用php://input,代码如下: <?php $xmldata=file_get_contents("php://input"); $data=s ...
- NodeJS示例异步式(Asynchronous)IO与同步式Synchronous)IO
理解IO IO(Input/Output)通常是指计算机线程进行慈磁盘读写或者网络通信时的一种行为. 同步式(Synchronous)IO和异步式(Asynchronous )IO ...