auto complete输入框 自动提示

本文介绍了一个模仿IE浏览器自动完成功能的JavaScript实现方案。该方案通过创建自定义的JavaScript类来实现输入框的自动补全功能,并展示了如何通过实例化该类并添加建议项来实现基本的自动补全逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<HTML>   
<HEAD>   
 
<title>模仿IE自动完成功能,读取输入框存取记录</title>   
<mce:style><!--  
   
body,div {   
       font-family:verdana;   
       line-height:100%;   
       font-size:9pt;   
}   
input {   
       width:300px;   
}   
h1 {   
       text-align:center;   
       font-size:2.2em;   
}   
#divf {   
       margin:10px;   
       font-size:0.8em;   
       text-align:center;   
}   
#divc {   
       border:1px solid #333333;   
}   
.des {   
       width:500px;   
       background-color:lightyellow;   
       border:1px solid #333;   
       padding:20px;   
       margin-top:20px;   
}   
.mouseover {   
       color:#ffffff;   
       background-color:highlight;   
       width:100%;   
       cursor:default;   
}   
.mouseout {   
       color:#000000;   
       width:100%;   
       background-color:#ffffff;   
       cursor:default;   
}   
--></mce:style><style mce_bogus="1">   
body,div {   
       font-family:verdana;   
       line-height:100%;   
       font-size:9pt;   
}   
input {   
       width:300px;   
}   
h1 {   
       text-align:center;   
       font-size:2.2em;   
}   
#divf {   
       margin:10px;   
       font-size:0.8em;   
       text-align:center;   
}   
#divc {   
       border:1px solid #333333;   
}   
.des {   
       width:500px;   
       background-color:lightyellow;   
       border:1px solid #333;   
       padding:20px;   
       margin-top:20px;   
}   
.mouseover {   
       color:#ffffff;   
       background-color:highlight;   
       width:100%;   
       cursor:default;   
}   
.mouseout {   
       color:#000000;   
       width:100%;   
       background-color:#ffffff;   
       cursor:default;   
} </style>   
<SCRIPT LANGUAGE="JavaScript">   
<!--   
 
// script by blueDestiny   
// email : blueDestiny [at] 126 . com   
 
// Object: jsAuto   
// browser: ie, mf.   
// example:   
 
// step1 :    
// create autocomplete container, return object and bind event to the object, and    
///create a new jsAuto instance:   
// <div id="divautocomplete"></div>   
// var autocomplete = new jsAuto("autocomplete","divautocomplete")   
// handle event:   
// autocomplete.handleEvent(value, returnObjectID)   
// <input id="rautocomplete" onkeyup="autocomplete.handleEvent(this.value,"ratocomplete",event)>   
 
// step2 :   
// add autocompete item:   
// autocomplete.item(string)   
// string must be a string var, you can split the string by ","   
// autocomplete.item("blueDestiny,never-online,csdn,blueidea")   
 
// http://www.never-online.com   
 
function jsAuto(instanceName,objID)   
{   
       this._msg = [];   
       this._x = null;   
       this._o = document.getElementById( objID );   
       if (!this._o) return;   
       this._f = null;   
       this._i = instanceName;   
       this._r = null;   
       this._c = 0;   
       this._s = false;   
       this._v = null;   
       this._o.style.visibility = "hidden";   
       this._o.style.position = "absolute";   
       this._o.style.zIndex = "9999";   
this._o.style.overflow = "auto";   
this._o.style.height = "50";   
       return this;   
};   
 
jsAuto.prototype.directionKey=function() { with (this)   
{   
       var e = _e.keyCode ? _e.keyCode : _e.which;   
       var l = _o.childNodes.length;   
       (_c>l-1 || _c<0) ? _s=false : "";   
 
       if( e==40 && _s )   
       {   
              _o.childNodes[_c].className="mouseout";   
              (_c >= l-1) ? _c=0 : _c ++;   
              _o.childNodes[_c].className="mouseover";   
       }   
       if( e==38 && _s )   
       {   
              _o.childNodes[_c].className="mouseout";   
              _c--<=0 ? _c = _o.childNodes.length-1 : "";   
              _o.childNodes[_c].className="mouseover";   
       }   
       if( e==13 )   
       {   
              if(_o.childNodes[_c] && _o.style.visibility=="visible")   
              {   
                     _r.value = _x[_c];   
                     _o.style.visibility = "hidden";   
              }   
       }   
 
       if( !_s )   
       {   
              _c = 0;   
              _o.childNodes[_c].className="mouseover";   
              _s = true;   
       }   
}};   
 
// mouseEvent.   
jsAuto.prototype.domouseover=function(obj) { with (this)   
{   
       _o.childNodes[_c].className = "mouseout";   
       _c = 0;   
       obj.tagName=="DIV" ? obj.className="mouseover" : obj.parentElement.className="mouseover";   
}};   
jsAuto.prototype.domouseout=function(obj)   
{   
       obj.tagName=="DIV" ? obj.className="mouseout" : obj.parentElement.className="mouseout";   
};   
jsAuto.prototype.doclick=function(msg) { with (this)   
{   
       if(_r)   
       {   
              _r.value = msg;   
              _o.style.visibility = "hidden";   
       }   
       else   
       {   
              alert("javascript autocomplete ERROR :nn can not get return object.");   
              return;   
       }   
}};   
 
// object method;   
jsAuto.prototype.item=function(msg)   
{   
       if( msg.indexOf(",")>0 )   
       {   
              var arrMsg=msg.split(",");   
              for(var i=0; i<arrMsg.length; i++)   
              {   
                     arrMsg[i] ? this._msg.push(arrMsg[i]) : "";   
              }   
       }   
       else   
       {   
              this._msg.push(msg);   
       }   
       this._msg.sort();   
};   
jsAuto.prototype.append=function(msg) { with (this)   
{   
       _i ? "" : _i = eval(_i);   
       _x.push(msg);   
       var div = document.createElement("DIV");   
 
       //bind event to object.   
       div.onmouseover = function(){_i.domouseover(this)};   
       div.onmouseout = function(){_i.domouseout(this)};   
       div.onclick = function(){_i.doclick(msg)};   
       var re  = new RegExp("(" + _v + ")","i");   
       div.style.lineHeight="140%";   
       div.className = "mouseout";   
       if (_v) div.innerHTML = msg.replace(re , "<strong>$1</strong>");   
       div.style.fontFamily = "verdana";   
 
       _o.appendChild(div);   
}};   
jsAuto.prototype.display=function() { with(this)   
{   
       if(_f&&_v!="")   
       {   
              _o.style.left = _r.offsetLeft;   
              _o.style.width = _r.offsetWidth;   
              _o.style.top = _r.offsetTop + _r.offsetHeight;   
              _o.style.visibility = "visible";   
       }   
       else   
       {   
              _o.style.visibility="hidden";   
       }   
}};   
jsAuto.prototype.handleEvent=function(fValue,fID,event) { with (this)   
{   
       var re;   
       _e = event;   
       var e = _e.keyCode ? _e.keyCode : _e.which;   
       _x = [];   
       _f = false;   
       _r = document.getElementById( fID );   
       _v = fValue;   
       _i = eval(_i);   
       re = new RegExp("^" + fValue + "", "i");   
       _o.innerHTML="";   
 
       for(var i=0; i<_msg.length; i++)   
       {   
              if(re.test(_msg[i]))   
              {   
                     _i.append(_msg[i]);   
                     _f = true;   
              }   
       }   
 
       _i ? _i.display() : alert("can not get instance");   
 
       if(_f)   
       {   
              if((e==38 || e==40 || e==13))   
              {   
                     _i.directionKey();   
              }   
              else   
              {   
                     _c=0;   
                     _o.childNodes[_c].className = "mouseover";   
                     _s=true;   
              }   
       }   
}};   
window.onerror=new Function("return true;");   
//-->   
</SCRIPT>   
</HEAD>   
 
<BODY>   
<div id="divc">   
       <!--this is the autocomplete container.-->   
</div>   
<h1>Autocomplete Function</h1>   
<div align="center">   
<input onkeyup="jsAutoInstance.handleEvent(this.value,'auto',event)" id="auto">   
</div>   
<div id="divf">   
       Power By Miracle, never-online   
</div>   
 
<SCRIPT LANGUAGE="JavaScript">   
<!--   
var jsAutoInstance = new jsAuto("jsAutoInstance","divc");   
jsAutoInstance.item("a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-start,d-start,e-start,f-start,g-start,h-start,i-start,j-start,k-start,l-start,m-start,n-start,o-start,p-start,q-start,r-start,s-start,t-start,u-start,v-start,w-start,x-start,y-start,z-start,z-start");   
jsAutoInstance.item("blueDestiny");   
jsAutoInstance.item("BlueMiracle,Blue");   
jsAutoInstance.item("angela,geniuslau");   
jsAutoInstance.item("never-online");   
//-->   
</SCRIPT>   
<center>请随便输入一个字母看看 -_-</center>   
</BODY>   
</HTML> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值