用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 相关文章推荐
JavaScript 提升运行速度之循环篇 译文
Aug 15 Javascript
javascript 程序库的比较(一)之DOM功能
Apr 07 Javascript
ie9 提示'console' 未定义问题的解决方法
Mar 20 Javascript
javascript对中文按照拼音排序代码
Aug 20 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
jQuery validate 验证radio实例
Mar 01 Javascript
微信小程序 setData使用方法及常用错误解决办法
May 11 Javascript
Async Validator 异步验证使用说明
Jul 03 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
vue组件watch属性实例讲解
Nov 07 Javascript
vue自定义指令directive的使用方法
Apr 07 Javascript
js+audio实现音乐播放器
Sep 13 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
php公用函数列表[正则]
2007/02/22 PHP
PHP 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python求解汉诺塔游戏
2020/07/09 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
如何用python 操作zookeeper
2020/12/28 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
JDK安装目录下有哪些内容
2014/08/25 面试题
飘柔洗发水广告词
2014/03/14 职场文书
《搭石》教学反思
2014/04/07 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
python flask开发的简单基金查询工具
2021/06/02 Python
Spring Bean是如何初始化的详解
2022/03/22 Java/Android