最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

基于jQuery的自动完成插件_jquery

来源:动视网 责编:小采 时间:2020-11-27 20:58:02
文档

基于jQuery的自动完成插件_jquery

基于jQuery的自动完成插件_jquery:下面是html测试代码: 代码如下: autoComplete .autoComplete {margin:8px;position:relative;float:left;} .autoComplete input{width:200px;height:25px;line-height:25px;margin:0;padding:0
推荐度:
导读基于jQuery的自动完成插件_jquery:下面是html测试代码: 代码如下: autoComplete .autoComplete {margin:8px;position:relative;float:left;} .autoComplete input{width:200px;height:25px;line-height:25px;margin:0;padding:0


下面是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(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,345,3454,7567,956,456,9383,3,999],
    //ajax:{ url:'./php/fetch.php?search=', dataType:'json', async:false },
    elemCSS:{ focus:{'color':'#0f0'}, blur:{'color':'#f00'} }
    });
    });
    /* Conclude */
    })(jQuery);

    调用时有个ajax请求被注释了,它返回一个json数据,我用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("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";
    ?>

    文档

    基于jQuery的自动完成插件_jquery

    基于jQuery的自动完成插件_jquery:下面是html测试代码: 代码如下: autoComplete .autoComplete {margin:8px;position:relative;float:left;} .autoComplete input{width:200px;height:25px;line-height:25px;margin:0;padding:0
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top