用javascript模仿ie的自动完成类似自动完成功的表单


Posted in Javascript onDecember 12, 2012

最近在写一个javascript框架,看见网上有不少自动完成功能的表单,所以一时兴起,用javascript写了一个,为自己的框架增点色.

步骤:
1.传入两个参数,第一个是你要绑定的表单对象,第二个是你要检索的数组.
2.动态建立一个div做为你要自动完成的层,设置属性和事件(我在这里并没有设置div的visible和display属性,而是将它的left设为"-1000px",这样就移出了浏览器之外,达到了隐藏的效果.
3.对传入的数组进行检索,找出与输入内容匹配或相近的项,并将其存入一个新的数组.这里用正则表达式进行了四次迭代,写的不好,还望见谅.
4.对存入检索后数据的那个新数组进行处理,去掉内容重复的项,并将其写进div内.
5.设置div的left,top,width即可.

下面看给出的完整代码:

if(!sx) 
var sx={}; 
sx.activex={}; 
sx.activex.autocomplete={ 
bind:function(a,s){ 
var d=document.createElement("div"); 
d.style.position="absolute"; 
d.flag="autocomplete"; 
document.body.appendChild(d); 
d.style.left="-1000px"; 
d.style.height="100px"; 
d.style.overflow="auto"; 
a.onblur=function(){ 
if(document.elementFromPoint(window.event.clientX,window.event.clientY).flag=="autocomplete" || document.elementFromPoint(window.event.clientX,window.event.clientY).parentNode.flag=="autocomplete") 
return; 
d.innerHTML=""; 
d.style.left="-1000px"; 
} 
a.onkeyup=function(){ 
if(a.value=="") { 
d.innerHTML=""; 
return; 
} 
d.innerHTML=""; 
var t=[]; 
for(var i in s){ 
if(eval("/^"+a.value+"$/i").test(s[i])){ 
t.push(s[i]); 
} 
} 
for(var i in s){ 
if(eval("/^"+a.value+".+$/i").test(s[i])){ 
t.push(s[i]); 
} 
} 
for(var i in s){ 
if(eval("/^.+"+a.value+"$/i").test(s[i])){ 
t.push(s[i]); 
} 
} 
for(var i in s){ 
if(eval("/^.+"+a.value+".+$/i").test(s[i])){ 
t.push(s[i]); 
} 
} 
for(var e=0;e<=t.length-2;e++){ 
for(var e1=e+1;e1<=t.length-1;e1++){ 
if(t[e]==t[e1]){ 
for(var e2=e1+1;e2<t.length;e2++){ 
if(t[e2]){ 
t[e2-1]=t[e2]; 
} 
} 
t.length=t.length-1; 
} 
} 
} 
//alert(t); 
for(var i in t){ 
var p=document.createElement("div"); 
p.innerText=t[i]; 
p.onmouseenter=function(){ 
this.style.backgroundColor="blue"; 
} 
p.onmouseleave=function(){ 
this.style.backgroundColor="white"; 
} 
p.onclick=function(){ 
a.value=this.innerText; 
d.style.left="-1000px"; 
} 
d.appendChild(p) 
} 
d.style.top=a.offsetTop+a.offsetHeight+"px"; 
d.style.left=a.offsetLeft+"px"; 
d.style.width=a.offsetWidth+"px"; 
} 
} 
}.

调用的html代码:
<html> 
<head> 
<title>Untitled Document</title> 
</head> 
<body> 
<script src="kongjian.js"></script> 
<input type="text" size="15" id="a"> 
<input type="text" size="15" id="a1"> 
<script> 
sx.activex.autocomplete.bind(document.getElementById("a"),["asd","a","sad","er","ewrew","aadasd","wqqwrqw","asasf","qweqw"]); 
sx.activex.autocomplete.bind(document.getElementById("a1"),["asd","a","sad","er","ewrew","aadasd","wqqwrqw","asasf","qweqw"]); 
</script> 
</body> 
</html>

代码没有优化,还请多多包涵,这里给出一个思路,让各位见笑了.
Javascript 相关文章推荐
js常用代码段收集
Oct 28 Javascript
angularJS提交表单(form)
Feb 09 Javascript
JavaScript获取元素尺寸和大小操作总结
Feb 27 Javascript
基于jquery实现简单的分页控件
Mar 17 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 Javascript
深入理解angular2启动项目步骤
Jul 15 Javascript
JS实现非首屏图片延迟加载的示例
Jan 06 Javascript
vue-cli脚手架-bulid下的配置文件
Mar 27 Javascript
vue实现固定位置显示功能
May 30 Javascript
Vue双向绑定实现原理与方法详解
May 07 Javascript
webpack5 联邦模块介绍详解
Jul 08 Javascript
javascript实现图片切换的幻灯片效果源代码
Dec 12 #Javascript
javascript跑马灯悬停放大效果实现代码
Dec 12 #Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
Dec 12 #Javascript
javascript采用数组实现tab菜单切换效果
Dec 12 #Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 #Javascript
日历查询的算法 如何计算某一天是星期几
Dec 12 #Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 #Javascript
You might like
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
Javascript String.replace的妙用
2009/09/08 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
python查找第k小元素代码分享
2013/12/18 Python
Python日志模块logging简介
2015/04/13 Python
python获取代码运行时间的实例代码
2018/06/11 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Tensorflow 多线程设置方式
2020/02/06 Python
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
司机岗位职责
2013/11/15 职场文书
初中生学习生活的自我评价
2013/11/20 职场文书
学校食堂采购员岗位职责
2013/12/05 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
临床护理求职信
2014/04/26 职场文书
公司合并协议书范本
2014/09/30 职场文书
2015公司年度工作总结
2015/05/14 职场文书
新人入职感言
2015/07/31 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python