php 搜索框提示(自动完成)实例代码


Posted in PHP onFebruary 05, 2012

百度的搜索大家都在用,当用户输入文字时,搜索框下面自动提示相关的信息,加强了用户体验,的确不错,那么这个效果是如何实现的呢

先看一下效果图吧,这样更有动力,要不然大家还不知道我在讲什么,到底要达到什么样的效果!

php 搜索框提示(自动完成)实例代码

下面先主要讲解原理:

在search.html页面中,用户在搜索框内输入“j”时,使用javascript获取搜索框的文本内容,到数据库中查找相关的内容并返回,再使用javascript将服务器返回的结果显示在搜索框下面的提示框内,供用户参考选择。

具体的实现方法:

首先在页面中做好搜索框、搜索按钮、显示搜索提示的层,如下代码

<div id="search">
<input type="text" name="k" /> <input type="button" name="s" value="搜索" />
</div>
<div id="search_auto"></div>

使用浏览器浏览页面,会看到下图的效果

php 搜索框提示(自动完成)实例代码

 

看起来很普通,没什么样式,现在稍作样式上的调整

#search{font-size:14px;}
#search .k{padding:2px 1px; width:320px;} /*将搜索框宽度设置大点WEB开发笔记(www.chhua.com)*/

再将显示搜索提示的层样式调整一下,由于搜索提示层在搜索框正下方,所以我们设置其定位方式为绝对定位

#search_auto{border:1px solid #817FB2; position:absolute;} /*设置边框、定位方式*/

接着用JS将搜索提示层的位置放置在搜索框正下方,且宽度和搜索框相同,这里我们采用jQuery来解决

$(‘#search_auto').css({‘width':$(‘#search input[name="k"]‘).width()+4});

搜索提示层的位置和宽度已经确定好了,由于在用户没有输入搜索文字前这个提示框是不显示的,所以我们先要将它设置成隐藏,在提示层的样式里加上display:none将其隐藏。

已经全部OK了,现在只要给搜索框的onkeyup注册事件即可,我们依然采用jQuery来处理,在jQuery中是keyup

$('#search input[name="k"]').keyup(function(){
$.post('search_auto.php',{'value':$(this).val()},function(data){  //向服务器上的search_auto.php发送post数据,$.post是jQuery的方法
if(data=='0') $('#search_auto').html('').css('display','none');  //判断服务器上返回的数据,如果等于0,则表示没有找到相关的内容,所以将提示框的内容清空并隐藏WEB开发笔记(www.chhua.com)*/
else $('#search_auto').html(data).css('display','block');  //如果服务器上返回的数据不等于0,则将返回的内容放到提示框内并显示提示框
});
});

上面客户端已经做好了,已经可以将用户输入的内容发送到服务器端,并响应服务器的返回值。

 

那么服务器端如何处理客户端发送来的数据呢,下面用PHP来举个例子

<?php
$v=$_POST[value];
$re=mysql_query("select * from test where title like '%$v%' order by addtime desc limit 10");  //根据客户端发送来的数据,到数据库中查询10条相关的结果
if(mysql_num_rows($re)<=0) exit('0');  //判断查询结果,如果没有相关的结果,那么直接返回0
echo '<ul>';
while($ro=mysql_fetch_array($re)) echo '<li><a href="">'.$ro[title].'</a></li>';  //将查询得到的相关结果的标题输出,这个地方需要注意,由于通过jQuery的ajax技术返回的文本是UTF-8编码,所以如果$ro[title] 中包含中文,一定要记得用PHP的iconv或其它函数将其转换成UTF-8编码,否则在页面中看到的会是一串乱码
echo '<li><a href="javascript:;" onclick="$(this).parent().parent().parent().fadeOut(100)">关闭</a& amp; gt;</li>';  //输入一个关闭按钮,让用户不想看到提示层时可以点击关闭,关闭按钮采用jQuery,解释一下,当前点击的按钮是$(this),一直向上找到其第三个父元素,让它逐渐消失WEB开发笔记(www.chhua.com)*/
echo '</ul>';
?>

现在服务器已经可以正确的执行我们发送过去的数据了,并且返回相应的结果,那么现在在搜索框内输入一个文字测试一下吧,但前提是你的数据库中得有与这个文字相关的内容啊,要不然你也看不到提示框的出现,因为没有相关提示内容啊,呵呵。

可是还有点美中不足,那就是提示框里面的内容不美观,和我们在百度搜索中看到的提示框相比,简直是太丑了,哈哈,不急,我们再用css来调整显示的效果

 

#search_auto li{background:#FFF; text-align:left;} /*设置提示框内的li标签效果*/
#search_auto li.cls{text-align:right;} /*设置提示框内的关闭按钮效果*/
#search_auto li a{display:block; padding:5px 6px; cursor:pointer; color:#666;} /*设置提示框内li标签下的a标签效果*/
#search_auto li a:hover{background:#D8D8D8; text-decoration:none; color:#000;} /*当鼠标移入提示框内时的效果*/

现在才算是真正的完全制作完成,至于要不要设置一个延迟处理,或是其它更完善的功能,留给朋友们自己开动脑筋了,大家也可以在下面回复你的想法,等等。

客户端完整代码:

<html>
<head>
<style>
#search{font-size:14px;}
#search .k{padding:2px 1px; width:320px;}
#search_auto{border:1px solid #817FB2; position:absolute; display:none;}
#search_auto li{background:#FFF; text-align:left;}
#search_auto li.cls{text-align:right;}
#search_auto li a{display:block; padding:5px 6px; cursor:pointer; color:#666;}
#search_auto li a:hover{background:#D8D8D8; text-decoration:none; color:#000;}
</style>
<title>jquery+php实现用户输入搜索内容时自动提示</title>
</head>

<body>
<div id=”search”>
<input type=”text” name=”k” /> <input type=”button” name=”s” value=”搜索” />
</div>
<div id=”search_auto”></div>
</body>
</html>

<script src=”jQuery.js”></script>
<script>
$(function(){

$(‘#search_auto').css({‘width':$(‘#search input[name="k"]‘).width()+4});
$(‘#search input[name="k"]‘).keyup(function(){
$.post(‘search_auto.php',{‘value':$(this).val()},function(data){
if(data=='0′) $(‘#search_auto').html(”).css(‘display','none');
else $(‘#search_auto').html(data).css(‘display','block');
});
});

});
</script>

服务器端完整代码:

<?php
$v=$_POST[value];
$re=mysql_query("select * from test where title like '%$v%' order by addtime desc limit 10");
if(mysql_num_rows($re)<=0) exit('0');
echo '<ul>';
while($ro=mysql_fetch_array($re)) echo '<li><a href="">'.$ro[title].'</a></li>';
echo '<li><a href="javascript:;" onclick="$(this).parent().parent().parent().fadeOut(100)">关闭</a& amp; gt;</li>';
echo '</ul>';
?>

PHP 相关文章推荐
PHP 数组遍历顺序理解
Sep 09 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php汉字转拼音的示例
Feb 27 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
PHP中FTP相关函数小结
Jul 15 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 #PHP
PHP测试程序运行时间的类
Feb 05 #PHP
PHP设计模式 注册表模式
Feb 05 #PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 #PHP
需要注意的几个PHP漏洞小结
Feb 05 #PHP
PHP的可变变量名的使用方法分享
Feb 05 #PHP
PHP中如何判断AJAX提交的数据
Feb 05 #PHP
You might like
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
phpinfo的知识点总结
2019/10/10 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
通过数据库向Django模型添加字段的示例
2015/07/21 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
Django实现内容缓存实例方法
2020/06/30 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
佛光寺导游词
2015/02/10 职场文书
预备党员考察意见范文
2015/06/01 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
带你了解Java中的ForkJoin
2022/04/28 Java/Android