<头>
自动完成 >
.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 #333solid;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;}
;
<脚本类型=“text/javascript”src=“../javascript/lib/jquery-1.4.2.min.js”>
头>
<身体>
身体>
;(function($){
/* 插件 */
$.fn.autoComplete=function(o){
if(o.ajax) o.ajax=$.扩展({ url:'', dataType:'json', async:true }, o.ajax||{});
o.elemCSS=$.extend({ focus:{'color':'#f00 '}, Blur:{'color':'#000'} }, o.elemCSS||{});
o=$.extend({
source:null,/* 提供一个匹配数组*/
ajax:{},/* 提供一个ajax条件,如果source存在则该参数无效 */
input:'input',/* 提供输入框的选择器 */
popup :'ul',/* 提供弹出框的选择器,必须是html的ul元素 */
elemCSS:{}/* 提供弹出框内item的焦点和模糊css对象 */
},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){
if( value.length>0 && fastExpr.exec(source[i])!=null )
this.$popup.append('
' source [i] '');
}
if($('li a',this.$popup[0]).length){ this.$popup.show(); }其他{ this.$popup.hide(); }
},
fetch:function(ajax,search,quickExpr){
var that=this;
$.ajax({
url: ajax.url 搜索,
数据类型: ajax.dataType,
异步: ajax.async,
错误: function(data,es,et){ alert('错误'); },
成功: 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 if(current>len) current=0
that.$popup.find("li a").get(current).focus();
}else if(event.keyCode==38){
当前--;
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 风格 */
返回处理程序;
})();
返回 this.each(function(){ handler(this,o); });
};
/* 调用 */
$(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'} }
})
});
/* 结论 */
})(jQuery);