JS实现仿百度输入框自动匹配功能的示例代码


Posted in Javascript onFebruary 19, 2014

现在很多网站都有这种效果,在文本框输入一个字符,下边会出来相匹配的内容,这个代码就演示了这个功能是如何完成的,当然,这是个静态的,你可以将提示的内容从数据库读取出来,要用到AJAX那东东。

<HTML>
<HEAD>
<title>带输入匹配的文本框</title>
<style>
body,div {
font-family:verdana;
line-height:100%;
font-size:10pt;
}
input {
width:320px;
}
h1 {
text-align:center;
font-size:2.2em;
}
#divc {
border:1px solid #555;
}
.des {
width:500px;
background-color:lightyellow;
border:1px solid #555;
padding:25px;
margin-top:25px;
}
.mouseover {
color:#ffffff;
background-color:highlight;
width:100%;
cursor:default;
}
.mouseout {
color:#000;
width:100%;
background-color:#ffffff;
cursor:default;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
<!--
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 :\n\n 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>
<div align="center">
<input onkeyup="jsAutoInstance.handleEvent(this.value,'auto',event)" id="auto">
</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,u-start,v-start,w-start,x-start,y-start,z-start,z-start,a-start,b-start,c-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,s-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,a-start,b-start,c-start,d-start,e-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>
Javascript 相关文章推荐
javascript+iframe 实现无刷新载入整页的代码
Mar 17 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
May 03 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
JavaScript中的冒泡排序法
Aug 03 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
Oct 27 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 Javascript
jquery获取transform里的值实现方法
Dec 12 jQuery
vue 组件中slot插口的具体用法
Apr 03 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
Vue封装的组件全局注册并引用
Jul 24 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
Apr 23 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 #Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
Feb 19 #Javascript
JS执行删除前的判断代码
Feb 18 #Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 #Javascript
jquery的live使用注意事项
Feb 18 #Javascript
js如何获取object类型里的键值
Feb 18 #Javascript
纯js写的分页表格数据为json串
Feb 18 #Javascript
You might like
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
为你总结一些php系统类函数
2015/10/21 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
PHP getName()函数讲解
2019/02/03 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
js常用DOM方法详解
2017/02/04 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
python连接字符串的方法小结
2015/07/13 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
中国梦读书活动总结
2014/07/10 职场文书
竞聘自述材料
2014/08/25 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
Python语言内置数据类型
2022/02/24 Python