JQuery实现自动补全的插件
2012-11-26 22:44
615 查看
JQuery实现自动补全的插件 -- 简明现代魔法
自动补全是一个非常人性化的设计,可以为用户节省很多输入时间。自动补全是如何实现的呢?下面的程序可供参考。
感觉这个东西很常用,很多其它js框架里有,但是太大了,用不了太多,自己写了个。下面是html测试代码:
下面是jQuery插件:
调用时有个ajax请求被注释了,它返回一个json数据,我用php读mysql数据库来测试的,如果需要,代码如下:
转自 http://www.nowamagic.net/jquery/jquery_AutoCompletePlugin.php
自动补全是一个非常人性化的设计,可以为用户节省很多输入时间。自动补全是如何实现的呢?下面的程序可供参考。
感觉这个东西很常用,很多其它js框架里有,但是太大了,用不了太多,自己写了个。下面是html测试代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>autoComplete</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> .autoComplete {margin:8px;position:relative;float:left;} .autoComplete input{width:200px;height:25px;line-height:25px;margin:0;padding:0;} .autoComplete ul{z-index:99;padding:0px;margin:0px;border:1px #333 solid;width:200px;background:white;display:none;position:absolute;left:0;top:28px;} .autoComplete li{list-style:none;} .autoComplete li a {display:block;color:#000;text-decoration:none;padding:1px 0 1px 5px;} .autoComplete li a:hover {color:#000;background:#ccc;border:none;} </style> <script type="text/javascript" src="../javascript/lib/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="../javascript/autoComplete.js"></script> </head> <body> <div class="autoComplete"> <input value="input" /> <ul><li></li></ul> </div> <div class="autoComplete"> <input value="input" /> <ul><li></li></ul> </div> <div class="autoComplete"> <input value="input" /> <ul><li></li></ul> </div> <div class="autoComplete"> <input value="input" /> <ul><li></li></ul> </div> </body> </html>
下面是jQuery插件:
;(function($){ /* Plugin */ $.fn.autoComplete=function(o){ if(o.ajax) o.ajax=$.extend({ url:'', dataType:'json', async:true }, o.ajax||{}); o.elemCSS=$.extend({ focus:{'color':'#f00'}, blur:{'color':'#000'} }, o.elemCSS||{}); o=$.extend({ source:null,/* privide an array for match */ ajax:{},/* provide an ajax conditions, if source is exist this parameter is invalid */ input:'input',/* provide the selector of input box */ popup:'ul',/* provide the selector of popup box, it must be a ul element of html */ elemCSS:{}/* provide the focus and blur css objects of items in the popup box */ },o||{}); var handler=(function(){ var handler=function(e,o){ return new handler.prototype.init(e,o); }; handler.prototype={ e:null, o:null, timer:null, show:0, $input:null, $popup:null, init:function(e,o){ this.e=e; this.o=o; this.$input=$(this.o.input,this.e); this.$popup=$(this.o.popup,this.e); this.initEvent(); }, match:function(quickExpr,value,source){ for(var i in source){ if( value.length>0 && quickExpr.exec(source[i])!=null ) this.$popup.append('<li><a href="javascript:;">'+source[i]+'</a></li>'); } if($('li a',this.$popup[0]).length){ this.$popup.show(); }else{ this.$popup.hide(); } }, fetch:function(ajax,search,quickExpr){ var that=this; $.ajax({ url: ajax.url+search, dataType: ajax.dataType, async: ajax.async, error: function(data,es,et){ alert('error'); }, success: function(data){ that.match(quickExpr,search,data); } }); }, initEvent:function(){ var that=this; this.$input.focus(function(){ var value=this.value, quickExpr=RegExp('^'+value,'i'), self=this; that.timer=setInterval(function(){ if(value!=self.value){ value=self.value; that.$popup.html(''); if(value!=''){ quickExpr=RegExp('^'+value); if(that.o.source) that.match(quickExpr,value,that.o.source); else if(that.o.ajax) that.fetch(that.o.ajax,value,quickExpr); } } },200); }).blur(function(){ clearInterval(that.timer); var current=-1; var len=that.$popup.find("li a").length-1; $("li a",that.$popup[0]).click(function(){ that.$input[0].value=$(this).text(); that.$popup.html('').hide(); }).focus(function(){ current = $(this).parent().index(); $(this).css(that.o.elemCSS.focus); }).blur(function(){ $(this).css(that.o.elemCSS.blur); }); $("li a",that.$popup[0]).keydown(function(event){ if(event.keyCode==40){ current++; if(current<0) current=len; if(current>len) current=0; that.$popup.find("li a").get(current).focus(); }else if(event.keyCode==38){ current--; if(current>len) current=0; if(current<0) current=len; that.$popup.find("li a").get(current).focus(); } }); }).keydown(function(event){ if(event.keyCode==40){ that.$popup.blur().find("li a").get(0).focus(); } }); $(this.e).hover(function(){ that.show=1; },function(){ that.show=0; }); $(document).click(function(){ if(that.show==0){ that.$popup.hide(); } }); } }; handler.prototype.init.prototype=handler.prototype;/* JQuery style */ return handler; })(); return this.each(function(){ handler(this,o); }); }; /* Invoke */ $(document).ready(function(){ $(".autoComplete").autoComplete({ source:[123,1234,43563,12346,3464564,3454,7567,956,456,9383,893,999], //ajax:{ url:'./php/fetch.php?search=', dataType:'json', async:false }, elemCSS:{ focus:{'color':'#0f0'}, blur:{'color':'#f00'} } }); }); /* Conclude */ })(jQuery);
调用时有个ajax请求被注释了,它返回一个json数据,我用php读mysql数据库来测试的,如果需要,代码如下:
<?php class DataFetch{ private $conn, $rs; function __construct(){ $this->conn = mysql_connect("localhost","root","pwd") or die("Cant't connect host~"); mysql_select_db("studentinfo",$this->conn) or die("Cant't select database~"); } public function data_list($s){ $this->rs=mysql_query("select sno from student where sno like '$s%'") or die(" 4000 Can't fetch~"); $dataList=array(); while($row = mysql_fetch_array($this->rs,MYSQL_ASSOC)){ array_push($dataList,$row); } return $dataList; } } $search= isset($argv[1]) ? $argv[1] : ( isset($_GET['search']) ? $_GET['search'] : '' ) ; $fetch=new DataFetch(); $data=$fetch->data_list($search); echo '['; foreach ($data as $key=>$value){ echo "\n\t"; echo '"'.$value['sno'].'"'; if( $key!=count($data)-1 ) echo ','; else echo "\n"; } echo "]\n"; ?>
转自 http://www.nowamagic.net/jquery/jquery_AutoCompletePlugin.php
相关文章推荐
- jquery autocomplete插件 实现输入框自动补全
- Jquery实现仿搜索引擎文本框自动补全插件
- 使用JQUERY的flexselect插件来实现将SELECT下拉菜单变成自动补全输入框
- jQuery自动补全autocomplete插件使用,三种获取数据源方式具体实现(true)
- jQuery autocomplete实现仿搜索引擎文本自动补全自动完成插件
- Jquery实现仿搜索引擎文本框自动补全插件
- jQuery Autocomplete插件实现文本框内容自动匹配补全
- jquery中插件实现自动添加用户
- JQuery UI autocomplete自动补全插件搜索结果去除提示
- 自己动手制作jquery插件之自动添加删除行的实现
- 【输入智能提示功能】PHP+jQuery实现自动补全功能
- 在Django中试用jQuery的Autocomplete插件,实现自动提示功能
- jQuery autoComplete插件-实现自动匹配
- jquery实现的自动关联的Autocomplete插件
- Struts2结合jquery autocomplet插件实现自动提示详解
- jQuery插件实现可输入和自动匹配的下拉框
- jQuery.Autocomplete实现自动补全(完成)词组功能(详解)
- jQuery autocomplete 自扩展插件、自动补全示例
- java web在不使用任何插件情况下实现文本框输入自动补全功能
- PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能