下面是html测试代码:
复制代码 代码如下:
autocomplete
下面是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(''+source[i]+'');
}
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(currentif(current>len) current=0;
that.$popup.find(li a).get(current).focus();
}else if(event.keycode==38){
current--;
if(current>len) current=0;
if(currentthat.$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读数据库来测试的,如果需要,代码如下:
复制代码 代码如下:
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(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;
?>