jquery+php实现搜索框自动提示


Posted in Javascript onNovember 28, 2014

今天突然想给本站做个搜索页面,这样用户可以通过搜索来找到自己喜欢的内容,也避免了在海量信息中手动查找资源的麻烦,我的目标和百度首页的效果类似,当用户输入要搜索的文字时,我们在下方给出相关的十条信息,如果用户要找的就是这十条信息内的某一条,那么简单,直接点击就可在新页面中打开页面,主要就是想更人性化一点,让用户使用起来更方便。

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

jquery+php实现搜索框自动提示

下面先主要讲解原理:

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

具体的实现方法:

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

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

使用浏览器浏览页面,会看到下图的效果
jquery+php实现用户输入搜索内容时自动提示
看起来很普通,没什么样式,现在稍作样式上的调整

#search{font-size:14px;}
#search .k{padding:2px 1px; width:320px;} /*将搜索框宽度设置大点*/

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

定位方式*/
接着用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,则表示没有找到相关的内容,所以将提示框的内容清空并隐藏
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 class="cls"><a href="javascript:;" onclick="$(this).parent().parent().parent().fadeOut(100)">关闭</a& gt;</li>';  //输入一个关闭按钮,让用户不想看到提示层时可以点击关闭,关闭按钮采用jQuery,解释一下,当前点击的按钮是$(this),一直向上找到其第三个父元素,让它逐渐消失
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" class="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代码:

<?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 class="cls"><a href="javascript:;" onclick="$(this).parent().parent().parent().fadeOut(100)">关闭</a& gt;</li>';
echo '</ul>';
?>

非常实用的功能吧,而且对提升用户的体验度、友好度非常棒,小伙伴们可以结合本文,自由发挥下,加入到自己的项目中去.

Javascript 相关文章推荐
JavaScript性能陷阱小结(附实例说明)
Dec 28 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
html的DOM中document对象images集合用法实例
Jan 21 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
Mar 05 Javascript
JS获取随机数和时间转换的简单实例
Jul 10 Javascript
AngularJS入门教程之Helloworld示例
Dec 25 Javascript
详解Vuejs2.0之异步跨域请求
Apr 20 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
May 04 Javascript
AngularJS 前台分页实现的示例代码
Jun 07 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
Dec 16 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
Nov 28 #Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 #Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 #Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 #Javascript
开源的javascript项目Kissy介绍
Nov 28 #Javascript
对比分析json及XML
Nov 28 #Javascript
jquery 操作css样式、位置、尺寸方法汇总
Nov 28 #Javascript
You might like
PHP+ajax 无刷新删除数据
2010/02/20 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python多线程编程(一):threading模块综述
2015/04/05 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
浅谈Python3中print函数的换行
2020/08/05 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
经理秘书求职自荐信范文
2014/03/23 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
环保倡议书400字
2014/05/15 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
2015年质检工作总结
2015/05/04 职场文书
Android自定义双向滑动控件
2022/04/19 Java/Android