刚入职的时候公司主管曾经让我用Cool Auto-Suggest 插件写过后台管理页面内的自动填充及搜索功能。

其实这个插件的使用很简单,网上也有相应的翻译文档,但是明显的机翻看着无法忍受。我写一下使用方法,方便不喜欢看英文文档的新手。

原文见:http://w3shaman.com/article/jquery-cool-auto-suggest

插件下载地址:https://github.com/w3shaman/jquery-coolautosuggest

插件使用前端部分

首先,你需要在你的前端页面中引入插件。

<!-- jQuery框架的引入 -->
<script language="javascript" type="text/javascript" src="js/jquery.js"></script>
<!-- 插件的jQuery代码部分 -->
<script language="javascript" type="text/javascript" src="js/jquery.coolautosuggest.js"></script>
<!-- 插件的样式部分 -->
<link rel="stylesheet" type="text/css" href="css/jquery.coolautosuggest.css" />

然后,在你需要使用插件的地方定义一个输入框

<input type="text" id="text1" name="text1" />

最后,初始化自动提示文本框

<script language="javascript" type="text/javascript">
$("#text1").coolautosuggest({
url:"data.php?chars=",
showThumbnail:true,
showDescription:true,
submitOnSelect:true
});
</script>

关于上述代码的配置项说明:

如果showThumbnail选项设置为true,插件将在每个建议项目上显示图像缩略图;

如果showDescription选项设置为true,插件将在每个建议项目上显示说明文字;

如果submitOnSelect选项设置为true,如果你点击了建议项目,表单将被自动提交。

同时,插件也支持回调函数。使用方法如下:

<script language="javascript" type="text/javascript">
$("#text1").coolautosuggest({
url:"data.php?chars=",
showThumbnail:true,
showDescription:true,
onSelected:function(result){
// 检查返回的结果是否为空
if(result!=null){
$("#text1_id").val(result.id); // 获取数据的ID字段
$("#text1_description").val(result.description); // 获取说明文字
} else {
$("#text1_id").val(""); // 将ID设为空
$("#text1_description").val(""); // 将说明文字设为空
}
}
});
</script>

插件使用后端部分

直接看代码,说明会在注释里给出

<?php
// 头信息设置
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 数据库连接设置
$host="localhost";
$username="test";
$password="";
$database="test";
// 建立数据库连接,选择数据库
$con=mysql_connect($host,$username,$password) or die(mysql_error());
mysql_select_db($database,$con) or die(mysql_error()); // 初始化一个空数组用以保存结果
$arr=array(); // 数据库查询
// 可以使用正则表达式或者MySQL自带的LIKE关键字进行模糊查询
$result=mysql_query("SELECT * FROM people WHERE name LIKE '%".mysql_real_escape_string($_GET['chars'])."%' ORDER BY name LIMIT 0, 10",$con) or die(mysql_error());
if(mysql_num_rows($result)>0){
while($data=mysql_fetch_row($result)){
// 将数据放入数组
$arr[]=array(
"id" => $data[0], // 该行数据的ID,任意,注意唯一性
"data" => $data[1], // 所要填写的数据
"thumbnail" => 'images/'.$data[3], // 该行数据的图标地址
"description" => $data[2] // 说明文字
);
}
} // 关闭数据库连接
mysql_close($con);
//将数组编码成JSON格式,传给前端
echo json_encode($arr);
?>

几个关键点在于:

  1. 需要使用数据库的模糊查询技术。如果是MySQL数据库可以使用LIKE关键字进行查询。公司使用的数据库是MongoDB,一般是初始化一个MongoRegex对象传给Criteria对象进行查询。
  2. 数组内id字段和data字段是必须的,如果没有这两个字段,插件会以alert的形式报错,非常讨厌。关于如何关闭报错,这个后面会说。
  3. 注意将数据编码成JSON格式。基本上涉及到和前端的JavaScript交互,JSON一定是会用到的。

其他设置

CSS设置

基本上使用插件是用不着修改它的CSS的,但是如果你考虑到网站的整体美观,可以修改一下插件的CSS文件。

/* 自动填充插件样式表 */

/*
为每一项添加左右的边框
| item 1 |
| item 2 |
*/
.suggestions .suggest_item{
padding-bottom: 2px;
padding-top: 2px;
background-color:#EEEEEE;
border-left:1px solid #CCCCCC;
border-right:1px solid #CCCCCC;
} /*
为第一行数据添加顶部的边框
------------
item 1
...
*/
.suggestions .suggest_item.first{
border-top:1px solid #CCCCCC;
} /*
为最后一行数据添加底部的边框
...
item 2
------------
*/
.suggestions .suggest_item.last{
border-bottom:1px solid #CCCCCC;
} /*
为选中的一项填充颜色
*/
.suggestions .suggest_item.selected, .suggestions .suggest_item.selected .description{
background-color:#999999;
color:#FFFFFF;
cursor:pointer;
} /*
每一项的图标设置
*/
.suggestions .suggest_item .thumbnail{
background-color: transparent;
background-position: top center;
background-repeat: no-repeat;
margin: 1px 2px 1px 2px;
float: left;
width: 50px;
height: 50px;
} /*
说明
*/
.suggestions .suggest_item .description{
font-style: italic;
font-size: 11px;
color: #777;
}

关闭插件的错误提示

插件的错误提示尽管不能少,但是因为它是以alert的形式弹出,因此非常恼人。只需要到插件的源代码里把错误提示改成console.log形式就好了,这样就可以在浏览器的控制台里看到错误提示信息。

找到jquery.coolautosuggest.js文件,在第126行至140的位置,找到以下代码,一共有两行

alert('Sorry, an error has occured!');

把alert改成console.log就可以了

设置插件提示框的z-index

如果页面比较复杂的话,插件的提示框就会被其他的页面元素遮掉。修改一下插件提示框的z-index即可解决。

找到插件源代码的186行左右,或者直接搜索z-index,即可快速定位。

将this.holder.css()函数修改为:

this.holder.css({
"position":"absolute",
"left":this.textField.position().left + "px",
"top":this.textField.position().top + this.textField.height() + 5 + "px",
// 修改这里!
"z-index":1000,
"height":height + "px"
});

个人使用心得

  1. 在后台代码中可以在需要传递的数组中添加一个content字段,其中用以保存需要传递到前端的其他数据,例如需要自动填充的表单数据,这样在触发onSelect事件后可以将页面中的表单自动填充。

    具体的自动填充代码不就不放了,有兴趣的话不妨研究一下jQuery然后写一个自动填充的插件。当然你也可以直接使用easyUI框架或者借鉴它的写法。

  2. 如果每次输入一个字符都要向数据库进行请求会造成数据库资源无谓的消耗。而且在字符较少的时候查询所得的数据量也太过于庞大,几乎起不到提示的作用。

    因此个人建议在前端为输入框绑定一个keyup事件,当输入的字符达到一定的数量后再发起对数据库的查询。注意使用undelegate()等事件方法删除输入框绑定的coolautosuggest方法,否则在第一次查询结束后删除所有字符,检查字符数量的方法就会失效。

Cool Auto-Suggest 插件使用方法的更多相关文章

  1. Sublime Text插件安装方法和常用插件

    插件安装方法: 1.打开Sublime Text,按下Ctrl+Shift+P调出命令面板 ; 2.输入install 调出 Install Package Control选项并回车; 3.再次按下C ...

  2. sublime text3的一些插件安装方法和使用

    sublime text部分插件使用方法在线安装package Control的方法:    ctrl+~ 输入如下代码:        import urllib2,os; pf='Package ...

  3. 安装Sublime Text 3插件的方法

    直接安装 安装Sublime text 3插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->packages). 使用Package Contr ...

  4. eclipse svn插件安装方法

    eclipse svn插件安装方法 使用dropins安装插件 从Eclipse3.5开始,安装目录下就多了一个dropins目录.只要将插件解压后拖到该目录即可安装插件.比如安装svn插件subcl ...

  5. Emmet插件使用方法总结

    Emmet插件使用方法总结 在前端开发的过程中,一大部分的工作是写 HTML.CSS 代码.特别是手动编写 HTML 代码的时候,效率会特别低下,因为需要敲打很多尖括号,而且很多标签都需要闭合标签等. ...

  6. 转:myeclipse 8.x 插件安装方法终极总结

    原文地址:http://shaomeng95.iteye.com/blog/945062 最近因为要指导新人顺便整理文档,懒得折腾eclipse,需要装的插件太多,于是乎装myeclipse 8.5吧 ...

  7. sublime text2 用ctags插件实现方法定位

    sublime text2 用ctags插件实现方法定位(转) 我们用sublime几乎都会首先安装这个插件,这个插件是管理插件的功能,先安装它,再安装其他插件就方便了. 点击sublime的菜单栏 ...

  8. Sublime Text 3插件安装方法

    安装Sublime Tex 3t插件的方法: 按快捷键Ctrl + ~ 调出console 粘贴以下代码到console并回车: import urllib.request,os; pf = 'Pac ...

  9. Jquery开发插件的方法

    Jquery未开发插件提供了两个方法: (1)Jquery.extend(object)    -为Jquery类本身添加新的方法;代码如下: $.extend({ add:function(a,b) ...

  10. suggest的使用方法

    suggest的使用方法注意: 1. 要表示汉语的"建议做某事",英语通经常使用suggest doing sth,而不能用 suggest to do sth: 2. " ...

随机推荐

  1. RMAN概述及其体系结构

    1 Recovery Manager(RMAN)特性 是一种用于集备份(backup).还原(restore)和恢复(recover)数据库于一体的Oracle 工具,支持命令行及图形界面操作 能够备 ...

  2. 170529、springMVC 的工作原理和机制

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  3. 170504、MongoDB和MySQL对比(译)

    一.概要 几十年来,关系型数据库已经成为企业应用程序的基础,自从MySQL在1995年发布以来,它已经成为一种受欢迎并且廉价的选择.然而随着近年来数据量和数据的不断激增,非关系数据库技术如MongoD ...

  4. 模拟百度云盘版的ftp

    思路:一.分两个大的文件夹,一个是客户端,一个服务端的 二.实现的功能 1.    登陆--对用户名的合法性进行检测(实验账户:alex,123)                注册--设置账户,其中 ...

  5. 小米范工具系列之一:小米范 web查找器

    最新版本1.5,下载地址:http://pan.baidu.com/s/1c1NDSVe  文件名web finder,请使用java1.8运行 小米范 web查找器主要功能为快速端口扫描,并识别we ...

  6. Ubuntu18.04下安装比特币客户端

    一.下载有两种安装方式:安装包和源码 二.安装1.通过安装包安装在https://bitcoin.org/en/download下载Windows,Mac OSX,Linux对应的安装包.安装过程比较 ...

  7. linux软件源配置

     实操(虚拟机安装): 下载VMware,然后按照如下教程安装虚拟机: https://jingyan.baidu.com/article/c275f6ba07e269e33d756714.html ...

  8. 【python】Python3 循环语句

    [python]几种常见的循环 注意:如果涉及到程序中print语句中含有%d,%s,那么要在脚本最开始写语句:#coding=utf-8,才能够正常输出想要的数字或者字符串. Python3 循环语 ...

  9. Mysql5.6主从复制

    搭建(192.168.1.10 -> 192.168.1.20) 1 master 上执行 阻塞 DMLflush tables with read lock; 记录 File 和 Positi ...

  10. [World Wind学习]22.相机高度和瓦片等级计算

    在这里我们看到判断Lod的级别主要有三个条件: * 1.相机视角范围,视角范围越大,所包含的tileSize就越大 * 2.相机与瓦片距离,距离越远,所包含的tileSize也就越大 * 3.相机视锥 ...