用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实现的所谓的滑动门
May 23 Javascript
基于jquery的获取mouse坐标插件的实现代码
Apr 01 Javascript
关于this和self的使用说明
Aug 01 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
js二级地域选择的实现方法
Jun 17 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
Jul 18 Javascript
jquery序列化方法实例分析
Jun 10 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
Dec 13 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
JavaScript实现随机点名程序
Mar 25 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
php阳历转农历优化版
2016/08/08 PHP
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
javascript常见操作汇总
2014/09/03 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
javascript中if和switch,==和===详解
2015/07/30 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
详解jQuery选择器
2016/12/21 Javascript
SVG描边动画
2017/02/23 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
jquery replace方法去空格
2017/05/08 jQuery
Vue2单一事件管理组件通信
2017/05/09 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
浅谈python中真正关闭socket的方法
2018/12/18 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
Python实现快速排序的方法详解
2019/10/25 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
思想专业自荐信范文
2013/12/25 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
二年级学生期末评语
2014/12/26 职场文书
旅行社计调工作总结
2015/08/12 职场文书
《观察物体》教学反思
2016/02/17 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL