用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中的escape及unescape函数的php实现代码
Sep 04 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
Aug 03 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
Jun 27 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
javascript日期格式化示例分享
Mar 05 Javascript
jquery选择器简述
Aug 31 Javascript
jQuery插件zTree实现删除树子节点的方法示例
Mar 08 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
详解webpack解惑:require的五种用法
Jun 09 Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
Mar 04 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
PHP array 的加法操作代码
2010/07/24 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
js密码强度校验
2015/11/10 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
python实现双人五子棋(终端版)
2020/12/30 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
经典C++面试题一
2016/11/06 面试题
七年级地理教学反思
2014/01/26 职场文书
安全施工责任书
2014/08/25 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书