用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即可.

下面看给出的完整代码:

  1. if(!sx)
  2. var sx={};
  3. sx.activex={};
  4. sx.activex.autocomplete={
  5.     bind:function(a,s){
  6.             var d=document.createElement("div");
  7.             d.style.position="absolute";
  8.             d.flag="autocomplete";
  9.                 document.body.appendChild(d);
  10.                 d.style.left="-1000px";
  11.                 d.style.height="100px";
  12.                 d.style.overflow="auto";
  13.                 a.onblur=function(){
  14.                     if(document.elementFromPoint(window.event.clientX,window.event.clientY).flag=="autocomplete" || document.elementFromPoint(window.event.clientX,window.event.clientY).parentNode.flag=="autocomplete")
  15.                     return;
  16.                     d.innerHTML="";
  17.                     d.style.left="-1000px";
  18.                 }
  19.             a.onkeyup=function(){
  20.                 if(a.value=="") {
  21.                     d.innerHTML="";
  22.                     return;
  23.                 }
  24.                 d.innerHTML="";
  25.                 var t=[];
  26.                 for(var i in s){
  27.                 if(eval("/^"+a.value+"$/i").test(s[i])){
  28.                     t.push(s[i]);
  29.                     
  30.                 }
  31.                 }
  32.                 for(var i in s){
  33.                 if(eval("/^"+a.value+".+$/i").test(s[i])){
  34.                     t.push(s[i]);
  35.                     
  36.                 }
  37.                 }
  38.                 for(var i in s){
  39.                 if(eval("/^.+"+a.value+"$/i").test(s[i])){
  40.                     t.push(s[i]);
  41.                     
  42.                 }
  43.                 }
  44.                 for(var i in s){
  45.                 if(eval("/^.+"+a.value+".+$/i").test(s[i])){
  46.                     t.push(s[i]);
  47.                     
  48.                 }
  49.                 }
  50.                 for(var e=0;e<=t.length-2;e++){
  51.                     for(var e1=e+1;e1<=t.length-1;e1++){
  52.                         if(t[e]==t[e1]){
  53.                             for(var e2=e1+1;e2<t.length;e2++){
  54.                                 if(t[e2]){
  55.                                     t[e2-1]=t[e2];
  56.                                     
  57.                                 }
  58.                             }
  59.                             t.length=t.length-1;
  60.                         }
  61.                     }
  62.                 }
  63.                 //alert(t);
  64.                 for(var i in t){
  65.                     var p=document.createElement("div");
  66.                     p.innerText=t[i];
  67.                     p.onmouseenter=function(){
  68.                         this.style.backgroundColor="blue";
  69.                     }
  70.                     p.onmouseleave=function(){
  71.                         this.style.backgroundColor="white";
  72.                     }
  73.                     p.onclick=function(){
  74.                         a.value=this.innerText;
  75.                         d.style.left="-1000px";
  76.                     }
  77.                     d.appendChild(p)
  78.                 }
  79.                 d.style.top=a.offsetTop+a.offsetHeight+"px";
  80.                 d.style.left=a.offsetLeft+"px";
  81.                 d.style.width=a.offsetWidth+"px";
  82.                 
  83.             }
  84.     }
  85. }.

调用的html代码:

  1. <html>
  2.     <head>
  3.         <title>Untitled Document</title>
  4.     </head>
  5.     <body>
  6.         
  7.         <script src="kongjian.js"></script>
  8.         <input type="text" size="15"  id="a">
  9.         <input type="text" size="15"  id="a1">
  10.         <script>
  11.             sx.activex.autocomplete.bind(document.getElementById("a"),["asd","a","sad","er","ewrew","aadasd","wqqwrqw","asasf","qweqw"]);
  12.         sx.activex.autocomplete.bind(document.getElementById("a1"),["asd","a","sad","er","ewrew","aadasd","wqqwrqw","asasf","qweqw"]);
  13.         </script>
  14.     </body>
  15. </html>

代码没有优化,还请多多包涵,这里给出一个思路,让各位见笑了.