仿百度搜索时的下拉列表提示(jQuery实现)

开发者福利!热门AI工具限免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

仿百度搜索时的下拉列表(jQuery实现)

   当我们使用百度或是谷歌进行搜索时,只要输入一个字母就可以产生一个下拉列表,并且可以通过键盘上下键来控制列表项的选择。最近在项目中也碰到了类似的情况,在文本框中输入某个字母就可以出现一个下拉列表,展现从数据库里搜索过来的结果。

  先说一下我的实现思路吧,当用户在文本框中输入时,可以利用ajax方式将文本框内内容传给后台的某个页面,在那个页面中经过处理后将产生的结果(这里的结果是一个字符串数组)再获取过来在前台呈现。有了思路后就开始考虑怎么去具体实现吧。首先要使用ajax的话,就想到可以使用jQuery提供的$.post()方法,这个方法可带4个参数,分别是:

  ·url,请求的页面URL地址;

  ·data(可选),作为HTTP消息的实体内容发送给服务器;

  ·callback(可选),载入成功后的回调函数,自动将请求结果和状态传递给该方法;

  ·type(可选),服务器端返回的数据格式,可以是:xml、html、script、json等。

好,现在对$.post()方法有了一定的了解,现在就可以考虑这个方法该怎么来写了。在我的项目中,请求的URL地址是@Url.Action("GetTags")(由于是ASP.NET MVC架构,地址是由Routing配置产生的,这个转义到前台就是一个普通的URL地址),需要传送的是ID为newTag的文本框中的值,所以第二个参数为{pinyins: $("#newTag").val()},这里的pinyins是由后台定义的。第三个参数callback是处理请求成功后要做的事,暂且命名为pinyinCallback,第四个参数设为'json',即数据格式为一个JSON对象。这样的话,这个ajax请求可以写为:

    
$.post( ' @Url.Action("GetTags") ' , { pinyins: $( " #newTag " ).val() }, pinyinCallback, ' json ' );

但是如果用户每输入一个字母就立即往服务器传的的话,服务器的承载就会过大,于是考虑可以将每次请求延迟一秒发送,于是发送请求的方法可以这样定义:

  

View Code
复制代码
     
1 function pinyinOption() {
2 var t = setTimeout( function () {
3 $.post( ' @Url.Action("GetTags") ' , { pinyins: $( " #newTag " ).val() }, pinyinCallback, ' json ' );
4 }, 1000 );
5
6 }
复制代码

 

  现在要考虑的就是这个方法在何时调用。既然是以用户输入结果来查询的,那么可以考虑jQuery的keyup事件,可以在文本框(id为newTag)的keyup事件触发后就调用之前定义的方法。但是又考虑到这个功能中可以通过键盘中上下键来控制列表中的选项,所以这个keyup事件可以这样来定义:

View Code
复制代码
     
1 $( " #newTag " ).keyup( function (e) {
2 if (e.keyCode != 40 && e.keyCode != 38 ) {
3 currentTxt = $( " #newTag " ).val();
4 pinyinOption();
5 }
6 }).focus( function () {
7 this .select();
8 });
复制代码

其中keyCode值38、40分别代表上键和下键。currentTxt记录的是当前文本框的内容。

  当请求成功后的回调函数pinyinCallback该做什么呢?这个回调函数该做的应该有这些事,首先要把请求来的数据在前台呈现出来,这样就需要创建一些新的DOM元素来装这些内容。就不废话了,直接上代码吧:

Html代码:

复制代码
View Code
     
1 < div class ="mb20 pr f14 ff" id ="tagDiv" >
2 < p >< span > 新标签 </ span > @Html.TextBox("newTag", null, new { style = "border: 1px solid #555;height: 20px;", autocomplete ="off"})
3 < input type ="submit" value ="添加" />< span > @ViewBag.Info </ span ></ p >
4 </ div >
复制代码

js代码:

View Code
复制代码
     
1 var $resultDiv = $( ' <div id="resultDiv" class="pa f12 ff"></div> ' );
2 var $resultUl = $( ' <ul id="resultUl"></ul> ' );
3 var $resultLi = [];
4 var currentTxt;
5
6 function pinyinCallback(data) {
7 $( " #resultDiv " ).show();
8 $resultUl.html( "" );
9 for ( var i = 0 ; data[i]; i ++ ) {
10 $resultLi[i] = $( " <li></li> " );
11 $resultLi[i].html(data[i]);
12 $resultUl.append($resultLi[i]);
13 }
14 if ($resultUl.html() == "" ) {
15 $( " #resultDiv " ).hide();
16 }
17 $resultUl.appendTo($resultDiv);
18 $resultDiv.appendTo($( " #tagDiv " ));
19 }
复制代码

目前这个回调函数只是将请求回来的数据添加到创建的id为resultDiv的容器内,再将这个容器添加到页面中已存在的id为tagDiv的容器中。而为了美观一点并为了实现点击一个列表项就提交的功能,这个回调函数还可以做这些工作:

js代码:

View Code
复制代码
     
1 $( " #resultDiv li " ).hover( function () {
2 $( this ).addClass( " esultDivLiHover " );
3 }, function () {
4 $( this ).removeClass( " esultDivLiHover " );
5 });
6 $( " #resultDiv " ).blur( function () {
7 $( " #resultDiv " ).hide();
8 });
9 $( " #resultDiv li " ).click( function (event) {
10 $( " #newTag " ).val($( this ).text());
11 $( " form " ).submit();
12 });
复制代码

css代码:

View Code
复制代码
     
1 #resultDiv
2   {
3 left : 47px ;
4 border : 1px solid #000 ;
5 background : #fff ;
6 z-index : 100 ;
7 width : 200px ;
8
9   }
10 #resultDiv li
11   {
12 cursor : default ;
13 padding : 2px 4px ;
14   }
15 .esultDivLiHover
16   {
17 background : #cfcfcf ;
18   }
复制代码

在列表项被点击后就提交一次表单,并把当前文本框的内容设置为列表项的内容。

  接下来就要实现键盘上下键控制的功能了,这样,全部的回调函数代码为:

View Code
复制代码
     
1 function pinyinCallback(data) {
2 $( " #resultDiv " ).show();
3 $resultUl.html( "" );
4 for ( var i = 0 ; data[i]; i ++ ) {
5 $resultLi[i] = $( " <li></li> " );
6 $resultLi[i].html(data[i]);
7 $resultUl.append($resultLi[i]);
8 }
9 if ($resultUl.html() == "" ) {
10 $( " #resultDiv " ).hide();
11 }
12 $resultUl.appendTo($resultDiv);
13 $resultDiv.appendTo($( " #tagDiv " ));
14 $( " #resultDiv li " ).hover( function () {
15 $( this ).addClass( " esultDivLiHover " );
16 }, function () {
17 $( this ).removeClass( " esultDivLiHover " );
18 });
19 $( " #resultDiv " ).blur( function () {
20 $( " #resultDiv " ).hide();
21 });
22 $( " #resultDiv li " ).click( function (event) {
23 $( " #newTag " ).val($( this ).text());
24 $( " form " ).submit();
25 });
26 // 键盘上下键控制
27 var index = - 1 ; // 标记上下键时所处位置
28
29 document.documentElement.onkeydown = function (e) {
30 e = window.event || e;
31 if (e.keyCode == 40 ) { // 下键操作
32 if ( ++ index == $( " #resultDiv li " ).length) { // 判断加一操作后index值是否超出列表数目界限
33 index = - 1 ; // 超出的话就将index值变为初始值
34 $( " #newTag " ).val(currentTxt); // 并将文本框中值设为用户用于搜索的值
35 $( " #resultDiv li " ).removeClass( " esultDivLiHover " );
36 }
37 else {
38 $( " #newTag " ).val($($( " #resultDiv li " )[index]).text());
39 $($( " #resultDiv li " )[index]).siblings().removeClass( " esultDivLiHover " ).end().addClass( " esultDivLiHover " );
40 }
41 }
42 if (e.keyCode == 38 ) { // 上键操作
43 if ( -- index == - 1 ) { // 判断自减一后是否已移到文本框
44 $( " #newTag " ).val(currentTxt);
45 $( " #resultDiv li " ).removeClass( " esultDivLiHover " );
46 }
47 else if (index == - 2 ) { // 判断index值是否超出列表数目界限
48 index = $( " #resultDiv li " ).length - 1 ;
49 $( " #newTag " ).val($($( " #resultDiv li " )[index]).text());
50 $($( " #resultDiv li " )[index]).siblings().removeClass( " esultDivLiHover " ).end().addClass( " esultDivLiHover " );
51 }
52 else {
53 $( " #newTag " ).val($($( " #resultDiv li " )[index]).text());
54 $($( " #resultDiv li " )[index]).siblings().removeClass( " esultDivLiHover " ).end().addClass( " esultDivLiHover " );
55 }
56 }
57 };
58 }
复制代码

   OK,现在这个功能就差不多搞定了,在ie6下也是完全正常,不过还是有一些bug需要改进,另外这个方法还是有可以优化的地方吧。晒一晒效果图:

  希望明天又是美好的一天,又不正的地方还希望多多指出。


仿百度下拉列表搜索框的jQuery实现方法 本文还有配套的精品资源,点击获取 简介:利用jQuery的强大功能,本项目旨在模拟百度搜索引擎的下拉列表搜索功能,提升用户搜索体验。项目将介绍如何通过jQuery的DOM操作、事件处理及Ajax交互实现智能模糊查询。从HTML结构构建、CSS样式美化、jQuery事件监听、动态内容更新到动画效果实现,每一个环节都被详细规划,以提供一个用户友好且响应迅速的搜索框。本项目还将探... 阅读详情

相关推荐

jQuery select选择框/文本输入框自动完成/自动提示插件

文框输入框的自动完成和自动提示功能可以帮助用户快速的完成操作,是非常好的产品使用体验。这里向大家推荐一款优秀的 jQuery 文本输入框自动完成 & 自动提示插件,帮助你在网站中轻松添加输入框的自动完成和自动提示功能。主要参数介绍: serviceUrl:Ajax 请求的 URL; lookup:本地数据数组; minChars:触发自动提示的最小字符数; params:请求的附加参数; formatResult:返回结果的格式化函数; autoSelectFirst:是否自动选中第一个; onSearchStart:搜索开始的回调函数; onSearchComplete:搜索完成的回调函数; tabDisabled:是否禁用 Tab 键;

jQuery仿百度搜索框下热门关键词列表代码.zip

有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!

jQuery仿百度搜索框自动补全代码插件

jQuery仿百度搜索框自动补全代码插件,很方便,类似于百度搜索

仿百度搜索下拉列表jQuery实现

  当我们使用百度或是谷歌进行搜索,只要输入一个字母就可以产生一个下拉列表,并且可以通过键盘上下键来控制列表项的选择。最近在项目中也碰到了类似的情况,在文本框中输入某个字母就可以出现一个下拉列表,展现从数据库里搜索过来的结果。   先说一下我的实现思路吧,当用户在文本框中输入,可以利用ajax方式将文本框内内容传给后台的某个页面,在那个页面中经过处理后将产生的结果(这里的结果是一个字符串数...

weixin_30267785的博客 284

百度搜索框代码(有下提示的)

根据不同类型的网站需求,我们一共提供三种引入方式供您选择: ·简单方式——方便的将“百度搜索框(带提示功能)”直接加入到您的网页中。 将以下代码加入到您的网页中,即可获得带有“搜索提示”功能的百度搜索框。 HTML代码: Javascript代码: 提示Javascript代码请添加到网页中标签的后面。 如使用utf-8编码,则需要在HTML

Hello World! 5766

百度搜索【二】(功能实现

<!doctype html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>百度搜索(功能实现)</title> </head...

307

Ajax实现百度搜索框自动提示功能

Ajaxs实现百度搜索框自动提示功能 当你在搜索框内写入关键字框会匹配和你输入的关键字相匹配的信息 文章目录Ajaxs实现百度搜索框自动提示功能实现效果一、pandas是什么?二、代码实现1.前端页面2.后端代码 实现效果 当你在搜索框内写入关键字框会匹配和你输入的关键字相匹配的信息 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、代码实现 1.前端页面 baidu.jsp <%@ page language

qq_54088719的博客 1943

仿百度搜索框–jQuery版本

仿百度搜索框–jQuery版本 维九月,序属三秋。此吾工作三个月之日,亦是吾重拾博客之。一路坎坷走来,经历良多,收获甚多。 正题 百度搜索框是企业开发中常用的一项功能,作为一个前端工作者,自然也是必不可少的。这篇博客中主要介绍jQuery版本的实现。 <!DOCTYPE html> <html> <head> <meta charset="UTF...

曾经 1652

JQUERY仿百度谷歌智能提示

若使用jquery智能提示,则主要使用Ajax动态调用后台。   仿百度谷歌智能提示,说实话,本篇博客仿的不太缜密,有待继续完善。   仿百度谷歌智能提示,思路主要如下:   1.后台根据前台传递的参数进行匹配,提供数据列表。   2.前台美观智能展示选择数据列表      声明:此篇博客的后台是假数据,没有搭建数据库进行匹配。      来一张目前功能截图:   鼠

3850

jquery php 百度搜索框智能提示效果

这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有需要的朋友可以下载测试哦。 先来看看效果代码如下index html文件,保保存成index htm 代码如下复制代码

NiceGY 3895

Ajax进阶篇()——使用jQuery实现异步校验用户名与仿百度搜索提示

使用jQuery实现异步校验用户名 在这篇《Ajax进阶篇()——异步校验用户名》文章中,我们就已经实现了异步校验用户名这个需求,只不过是没有使用jQuery而已,现在我们使用jQuery的方式来实现同样的需求。 这里,只需要修改用户注册页面即可,改用jQuery的方式发送post请求。所以,register.jsp页面的内容应改为: <%@ page language="java" co...

李阿昀的博客 785

仿百度联想词下拉列表,键盘上下键选值

也是一个项目中的控件,需要做一个仿百度搜索框的联想词列表,并且通过上下键可以选值 同样免费下载的地址:http://download.csdn.net/detail/guyuehu452/4334364 欢迎互加!   贴代码如下: 仿百度联想词列表 $('.needCheck').assoc(); *{ margin:0; padding:0

hale的专栏 2520

ajax+jquery实现类似百度搜索提示

ajax+jquery实现类似百度搜索提示框 需求: 1、     输入某一关键字后,在搜索框下会显示出与此关键字相关的提示信息 2、     可以通过键盘的上下键以及回车键进行操作   思路: 1、     输入关键字后,通过ajax异步的方式将关键字提交给相应的处理模块,获得处理结果(主要是通过查询数据库中某张表获得以此关键字开头的符合要求的数据),然后再加载到页面上。 2、

Dsmart_30buy的专栏 2480

仿百度搜索提示功能

前段间一直想试下写个异步查询的功能来练习下ajax,于是,在一个小项目中,将一个文件的搜索功能做成像百度那个样子(当然,不可能做到好像百度一样强大),为此,也找了不少资料和别人的例子(不过没有一个让我完全满意的),于是,在参考别人的代码的基础上,自己写了一个,其基本原理是利用jQuery实现Ajax异步查询,后台则是利用模糊查询来获取结果,最后传给前台来显示,html网页代码(里面含有boost

Darkness_zero的专栏 1393

jquery实现百度搜索提示

jquery百度提示框 创建表单页面 &lt;center&gt;标签,可以将包含在此标签的标签数据都剧中显示 在style标签内有一个position:relative;left:-43px;,作用是将此标签的内容向左偏移43px像素 源码: &lt;%@ page language="java" contentType="text/html; charset=UTF-8" ...

qq_42799000的博客 895

jQuery仿百度提示

html代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="js/jque...

Woo_home的博客 300

仿百度搜索框效果

jQuery百度搜索提示框效果代码 $(function(){ $("#tt").bigAutocomplete({ width:543, data:[{title:"中国好声音",result:{ff:"qq"}}, {title:"中国移动网上营业厅"}, {title:"中国银行"}, {title:"中国移动"}, {title:"中国好声音第三期"

小飞侠V3 3182

使用JQuery完成仿百度的信息提示

使用JQuery完成仿百度的信息提示 1、需求分析 在一个搜索页面中,键盘输入一些信息,在文本框下面给出一些提示信息(需要从服务器端进行查询的)。 2、步骤分析 1、创建一个数据库和表: 2、设计一个页面 3、文本框绑定一个事件.keyup 4、在keyup所触发函数中: (1)获得文本框的值. (2)将这个值异步提交到服务器.$.post(); (3)提交到Servlet...

赵至柔的博客 1854

php jquery 百度搜索,jquery php百度搜索框智能提示效果

这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有需要的朋友可以下载测试,代码如下:index.html文件,保保存成index.htm,代码如下:Ajax Auto SuggestType your county: php文件,代码如下:0) {$sql= "SELECT value FROM countries WHERE value LIKE '".$qu...

weixin_30672649的博客 236
上一篇: Jquery实现自动提示下拉框
下一篇: CentOS 6.3设置静态IP教程
huoshi5151
博客等级 码龄17年 12粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值