基于jQuery的自动完成插件

下面是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读数据库来测试的,如果需要,代码如下:


代码如下:

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

(0)

相关推荐

  • jQuery Autocomplete自动完成插件

    相对于同类插件,他的特色有3点. 1.可缓存查询结果 (二次查询速度快) 2.非keyup监听方式 (解决某些系统/情况下无法触发keyxxx事件的问题) 3.简洁的参数 (好看?) 插件性能尚好,我的E6500.2G内存,30秒内一共发生了4469次调用,耗时94.65毫秒:百度的是2432次调用,80.24毫秒. 接近1倍的调用是jQuery中的问题,但具体原因我还没弄明白,如果那位兄弟知道的还请不吝赐教. 调用方法 复制代码 代码如下: jQuery("#kw").suggest

  • jquery autocomplete自动完成插件的的使用方法

    首先下载所需文件,jquery.autocomplete.js和jquery.autocomplete.css. 由于该控件获得数据可以从数组和URL两种方式获取,所以写了两个简单的小例子试验一下. 前台代码如下: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AutoComplete.aspx.cs" Inherits="AutoComple

  • PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能

    我们在很多项目中使用了搜索功能来帮助用户更快更准确的找到想要的信息.本文将介绍如何实现用户输入自动提示的功能,就像谷歌百度搜索引擎一样,当用户输入关键字时,输入框下方会有提示,将与关键字相关的信息展现出来供用户选择,提升了用户体验. 本文将使用jquery ui的autocomplete插件,结合后端PHP,数据源通过PHP读取mysql数据表的数据. XHTML 首先将jquery库和相关ui插件,以及css导入. 复制代码 代码如下: <link rel="stylesheet&quo

  • 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是介绍两个最常用的jQuery插件. 分别用于表单验证和自动完成提示(类似google suggest). 二.前言 研究别人的作品真是一件花时间而且痛苦的过程. 当然也和本人英文不好有关. 总觉得控件作者写了很多文档但是都不够系统, 需要深入研究很多的实例后才能了解作者的思路.所以学习和研究一个插件需要很高成本, 如果发现了Bug并修复需要

  • jQuery autocomplate 自扩展插件、自动完成示例代码

    复制代码 代码如下: 不过做了浏览器方面的兼容,经测试兼容IE6+.Firefox3.5+ 首先看看autocomplate.js: ;(function ($) { var index = -1; var timeId; var cssOptions = { "border": "1px solid black", "background-color": "white", "position": &quo

  • jquery自动完成插件(autocomplete)应用之PHP版

    于工作中需要用到自动提示这个功能,呵呵,自己又是js小菜,于是百度了一下,找到一个用jquery与其插件autocomplete开发的.net版的自动完成功能,于是down下来了改成了php版的,并加了支持向上/向下选择文字等功能,放上来共享一下,纯体力活... :) 1.下载jquery库,网址:http://jquery.com/ : 2.下载jquery autocomplete插件或者直接使用我附件里提供的文件,自己下载下来的文件需要修改一些内容才能支持向上/向下选择文字.解决中文乱码,

  • jQuery 插件autocomplete自动完成应用(自动补全)(asp.net后台)

    autocomplete官网 : http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/ (可下载jQuery autocomplete插件). 淘宝商品搜索功能 效果: 下面来使用 autocomplete插件来实现类似效果.1. 创建 AjaxPage.aspx 页面,在其中定义 WebMethod 方法来返回 搜索页面需要的输入框所有提示条目. 后台代码如下: 复制代码 代码如下: using System.Coll

  • jQuery自动完成插件completer附源码下载

    我们在表单输入的时候,如要输入邮箱之类,只需输入邮箱名前段,那么@后面的内容将自动补全,将常用的几个邮箱列出来,用户只需选择一下就可以完成表单的输入.诸如此类的还有时间的输入.域名的输入都能自动完成,这些都由插件completer来帮您实现. 效果展示图如下所示: 效果展示       源码下载 HTML 首先载入jQuery库和插件completer.js,当然还有相关CSS样式文件,这些都在源码下载里已打包好了. <script src="jquery.js"><

  • 基于jQuery的自动完成插件

    下面是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&

  • 基于jQuery的消息提示插件之旅 DivAlert(三)

    本版本遵循了2.0的写法,此处通过extend方法封装了需要设置的各个选项,比起2.0版本的代码要精简了一些. 2.0版本 复制代码 代码如下: //设置插件基本信息 var options = o || {}; options.width = o.width || 300; //提示框宽度若小于104px则自动重置为200px if (options.height > 104) { options.height = o.height; } else { options.height = 200

  • 基于jQuery的消息提示插件 DivAlert之旅(二)

    改进的代码部分主要如下: 1.创建default.css文件: 代码 复制代码 代码如下: img { vertical-align:middle; } .jBg { position: absolute; top: 0; left: 0; z-index: 9999; background-color: #999; filter: alpha(opacity=70); opacity: 0.7; } .jWrap { position: absolute; border: 1px solid

  • viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)

    一.简介 Viewer.js 是一款强大的图片查看器. Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 支持键盘 支持全屏幻灯片模式(可做屏保) 支持缩略图 支持标题显示 支持多种自定义事件 Viewer.js 提供了纯 JS 版本和 jQuery 版本,版本名字虽然一样,但代码不一样,不能通用. 二.下载 纯JS版本: 下载地址:https://github.com/fengyuanchen/

  • 基于jQuery的表格操作插件

    大多数前端er都把网页中的table标签替换为div,主要就是因为div要比table更容易添加CSS样式.但是我们在日常应用中仍然要用到table表格,其中最好的例子就是对照表.今天彬Go将向大家推荐15个jQuery表格插件让你对数据表格进行显示.排序.筛选和操控.如jQuery表格排序插件.jQuery表格拖拽插件.jQuery树形表格插件.设置颜色.点击.替换等效果. 1.DataTables-强大的jQuery表格插件 DataTables是提供了大量特性的强大jQuery表格插件.例

  • 精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程

    当你想在有限的页面空间内展示多个内容片段的时候,手风琴(Accordion)效果就显得非常有用,它可以帮助你以对用户非常友好的方式实现多个内容片段之间的切换.借助流行的 jQuery 框架,只需很少的代码就可以实现精美的手风琴效果,帮助你的网站吸引更多用户的眼球. Elegant Accordion with jQuery and CSS3 首先推荐的这款插件是基于 jQuery 和 CSS3 实现的优雅的鼠标悬停手风琴效果. 制作教程 在线演示 Vertical Sliding Accordi

  • 基于jQuery实现选取月份插件附源码下载

    这是一个基于jQuery的可以选择年份和月份的月份拾取插件,你可以设置点击页面上的任意元素触发弹出年月选择面板,可以是一个链接也可以是一个输入框,广泛应用于月份查询,而无需设置select表单. 效果展示        源码下载 HTML 首先将monthpicker插件相关的css和js文件载入,大家可以到源码下载里下载css和js文件. <link rel="stylesheet" type="text/css" href="jquery.mon

  • 推荐6款基于jQuery实现图片效果插件

    1.基于jQuery实现的汇图网大屏焦点图效果 汇图网大屏jQuery焦点图代码,可设置切换模式,如淡入淡出切换,左右滚动切换,上下滚动切换,可设置是否自动轮播,可设置鼠标划过是否停止播放等. 在线演示 源码下载 2.HTML5基于SVG实现的过山车动画特效 今天我们要分享一款很酷的HTML5/SVG动画,这款HTML5动画是过山车效果,主要是利用了SVG的path动画来实现的,整体动画效果流畅自然,效果非常酷. 在线演示 源码下载 3.jQuery实现苹果官网页面上下滚动全屏效果 这是一款基于

  • Notify - 基于jquery的消息通知插件

    Sticky是一个简单的页面消息提醒jQuery插件.可以设置让消息在页面的四个角落出现,也可以设置在页面中央出现.可以手动关闭消息,也可以设置成自动关闭. http://thrivingkings.com/sticky/ 2)JNotify是一个JQuery插件,基于JQuery UI实现,用于创建页面消息提醒和状态提示条. http://jnotify.codeplex.com/  演示地址:http://www.fabiofranzini.com/jNotify/Demo.html 3)H

  • 基于jquery的lazy loader插件实现图片的延迟加载[简单使用]

    通过使用jquery的lazy loader插件可以实现图片的延迟加载,当网页比较长的时候,会先只加载用户视窗内的图片,视窗外的图片会等到你拖动滚动条至后面才加载,这样有效的避免了因图片过多而加载慢的弊端. 使用lazy loader插件很简单,只要在页面中引入lazy loader插件,然后为页面上的图片调用延迟加载方法就可以了.lazy loader插件的下载地址:http://www.appelsiini.net/projects/lazyload.下面先看看具体的使用方法: 复制代码 代

随机推荐