用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滚动条多种样式,推荐
Feb 05 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
Feb 15 Javascript
js 动态文字滚动的例子
Jan 17 Javascript
jQuery的each终止或跳过示例代码
Dec 12 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
jquery实现文本框textarea自适应高度
Mar 09 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
May 28 Javascript
js实现的xml对象转json功能示例
Dec 24 Javascript
javascript prototype原型详解(比较基础)
Dec 26 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
May 15 Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 Javascript
vscode vue 文件模板的配置方法
Jul 23 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
德劲1107的电路分析与打磨
2021/03/02 无线电
php中unserialize返回false的解决方法
2014/09/22 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
原生js调用json方法总结
2018/02/22 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
python 提取文件的小程序
2009/07/29 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
自我鉴定模板
2013/10/29 职场文书
农民入党思想汇报
2014/01/03 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
抵押贷款承诺书
2014/05/30 职场文书
教书育人演讲稿
2014/09/11 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2016年校长新年寄语
2015/08/17 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
判断Python中的Nonetype类型
2021/05/25 Python