用javascript仿ie的自动完成
来源:互联网 发布:人类 群婚 知乎 编辑:程序博客网 时间:2024/04/29 17:04
最近在写一个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仿ie的自动完成
- 仿google自动完成的JAVASCRIPT
- 关于IE的自动完成功能
- 彻底关闭IE的自动完成提示
- 仿百度和谷歌的自动完成
- 模仿IE的自动完成功能,支持FireFox
- 如何使用代码清除IE的自动完成表单
- JS自动完成(仿google)
- Jquery 仿百度搜索引擎自动完成功能
- IE自动完成在ifame下解决方案
- 自动完成【纯HTML+Javascript】
- javascript 自动完成下拉框
- js如何仿Google自动完成的实现方法与拼音支持的理论
- js仿baidu google 实用的文本框内容自动完成效果
- ExtJs ComboBox 在IE 下 自动完成功能无效的解决方案
- firefox用12306Helper 0.2结合ie tab+自动订火车票和完成支付全攻略
- 自动完成的实现
- 简单的自动完成
- 把javascript,vbscript中得数组传递给COM组件(or Activex)
- 赤壁 -- 舞
- 宏定义中##和#的作用
- VS2005 联机调试WINCE
- unix学习方法-高手之路
- 用javascript仿ie的自动完成
- 转:net易混淆的概念
- Java使用XStream将集合类内容序列化为XML
- The Ultimate Toolbox UI Menu bar bug
- 第一天 环境设置
- java中的集合排序
- Tomcat+SQL Server2000连接池配置
- [贺新年] 更有效率的 Linux 操作命令
- HTML&&JS