用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中的History历史对象
Jan 16 Javascript
JsDom 编程小结
Aug 09 Javascript
js函数中onmousedown和onclick的区别和联系探讨
May 19 Javascript
js定时器(执行一次、重复执行)
Mar 07 Javascript
jQuery实现的登录浮动框效果代码
Sep 26 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
javascript实现动态时钟的启动和停止
Jul 29 Javascript
JS document内容及样式操作完整示例
Jan 14 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
Jun 19 Javascript
微信小程序实现购物车小功能
Dec 30 Javascript
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
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
数字转英文
2006/12/06 PHP
10个实用的PHP代码片段
2011/09/02 PHP
php操作MongoDB类实例
2015/06/17 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
Python语言描述最大连续子序列和
2017/12/05 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
Python常用库大全及简要说明
2020/01/17 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python itertools.product方法代码实例
2020/03/27 Python
Python 串口通信的实现
2020/09/29 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
出纳岗位职责范本
2013/12/01 职场文书
十佳护士获奖感言
2014/02/18 职场文书
公司领导班子对照材料
2014/08/18 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书