热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于jQuery的自动完成插件

感觉这个东西很常用,很多其它js框架里有,但是太大了,用不了太多,自己写了个。需要的朋友可以参考下。
下面是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('
  • '+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,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读数据库来测试的,如果需要,代码如下:
    代码如下:

    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";
    ?>

    推荐阅读
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
    • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
    • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
    • Jquery 跨域问题
      为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
    • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
    • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
    • asp.net(vb脚本)如何获取xml的节点值?xmlversion1.0encodingutf-8?rootimageimagemenusmenuurl#frame_paren ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
    • express工程中的json调用方法
      本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
    author-avatar
    莫名其妙520a_416
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有