java简单的实现搜索框的下拉显示相关搜索功能

简介: 最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索   先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来   搜索框相关搜索的展示很简单,就是根据你的搜索词,去数据库中匹配,是否有类似的搜索词存...

最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索

  先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来

  搜索框相关搜索的展示很简单,就是根据你的搜索词,去数据库中匹配,是否有类似的搜索词存在,按照搜索词被搜索的次数进行排序显示出来

我设计的是每次搜索一个词,提交之后都会去数据库进行查询,看是否存在这个搜索词的搜索,若存在,则对数据库中的这个搜索词对象进行次数加1,不存在,则创建这个新搜索词对象,保存在数据库中,定义搜索次数为1

  每次提交搜索都会将搜索词进行保存或次数加1,方便下次显示相关搜索

 1 public String soso(){
 2         if(search!=null){
 3             searchBiz.addSearch(search);//存储搜索对象或对搜索对象的搜索次数+1
 4         }
 5         return "soso";
 6     }
 7     public String getRelativeSearch() throws UnsupportedEncodingException{//根据搜索词内容得到相关的搜索对象
 8         content = URLDecoder.decode(content,"utf-8");//url解码,将其还原成中文等内容
 9         String ss = content.replaceAll("(?s)(.)(?=.*\\1)", "");//这个方法是网上查的,删除字符串里面重复出现的字符内容,我在这边设计,主要就是为了排除%的影响,会匹配到所有内容
10         if(content!=null&&!content.equals("")&&!ss.equals("%")){//即如果搜索词全部是由百分号组成,则去查询相关的搜索词
11             searchs = searchBiz.getRelativeSearch(content);//得到相关的搜索词对象,最多显示10个
12         }
13         return "searchs";
14     }

  还有就是页面上方法的监听,在什么时候会显示下拉框内容,什么时候会隐藏下拉框内容,我简单参考了下百度的设计,并用自己的方法实现,可能真实设计上会有出入。一开始,我设计的是onchange监听,但发现onchange只有在失去焦点并且改变内容才会触发,后来改为了onkeyup来监听搜索框的内容,即键盘释放后,去数据库查询得到相关的搜索词对象。

 1 <body class="index">
 2     <div class="searchbox ">
 3         <div class="search w652 center">
 4           <form  name="formsearch" method="post" action="<c:url value="/SearchAction_soso.action"/>">
 5             <div class="form">
 6                 <div class="form_left">
 7                     <!-- 搜索框 -->
 8                     <div class="form_right">
 9                       <input onkeyup="Search.relativeS()" autocomplete="off" name="search.content" type="text" class="search-keyword" id="search-keyword" value="输入搜索关键词,回车搜索" onfocus="if(this.value=='输入搜索关键词,回车搜索'){this.value='';};Search.relativeS()"  onblur="if(this.value==''){this.value='输入搜索关键词,回车搜索'};setTimeout(Search.hiddenhot,100)" />
10                       <button type="submit" class="search-submit" >搜索</button>
11                     </div>
12                     <!-- 下拉框 -->
13                     <ul id="hotwords" class="hotwords">
14                         
15                     </ul>
16                 </div>
17             </div>
18           </form>
19            </div>
20     </div>
21   </body>

  在js中通过ajax实现和后台的交互,得到查询出来的search对象

 1 relativeS:function(){
 2         var input = document.getElementById("search-keyword");
 3         var content = input.value;
 4         content= encodeURI(encodeURI(content));//URI编码转换
 5         Ajax.sendRequest("post","url","content="+content,this.relativefun)
 6     },
 7     relativefun:function(p){
 8         var searchs = JSON.parse(p.text);
 9         var ul = document.getElementById("hotwords");
10         //得到相关搜索的搜索对象并进行操作,生成对象加载到页面中
11         if(searchs!=null&&searchs.length>0){
12             ul.style.display = "block";
13             $("#hotwords li").remove();//移除之前生成的li相关搜索
14             for(var i=0;i<searchs.length;i++){
15                 var li = document.createElement("li");
16                 
17                 li.innerHTML = searchs[i].content;
18                 li.onclick = function onclick(){
19                     Search.choosecontent(this);
20                 }
21                 ul.appendChild(li);
22             }
23         }else{
24             ul.style.display = "none";
25         }
26     },
27     choosecontent:function(e){
28         var input = document.getElementById("search-keyword");
29         var ul = document.getElementById("hotwords");
30         input.value = e.innerHTML;
31         ul.style.display = "none";
32     },
33     //搜索框丢失焦点,下拉框也会消失
34     hiddenhot:function(){
35         var ul = document.getElementById("hotwords");
36         ul.style.display = "none";
37     }

  点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来

相关文章
|
3月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
36 4
|
16天前
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
Java多线程教程:使用ReentrantLock实现高级锁功能
19 1
|
11天前
|
前端开发 开发者 安全
JSF支付功能大揭秘:探索如何在Java世界中实现安全无缝的在线支付体验
【8月更文挑战第31天】在电子商务和在线交易日益普及的今天,实现在线支付功能已成为许多Web应用的必备需求。JavaServer Faces (JSF) 作为一种流行的Java Web框架,提供了丰富的组件和工具来构建用户界面,包括与支付网关集成以实现在线支付。支付网关是处理信用卡和借记卡支付的系统,在商家和银行之间起到桥梁作用。本文将探讨如何使用JSF与支付网关集成,以及实现在线支付功能时需要考虑的关键点
24 0
|
2月前
|
存储 NoSQL Java
Java中使用redis的bitMap实现签到功能
这个实现示例提供了一种灵活、高效的方式,展示了如何使用Redis来解决现实中的问题。
87 2
|
29天前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
|
3月前
|
前端开发 Java 开发工具
Java医院绩效考核系统源码:关于医院绩效考核系统的技术架构、系统功能、如何选择医院绩效考核管理系统
系统开发环境 开发语言:java 技术架构:B/S架构 开发工具:maven、Visual Studio Code 前端框架:avue 后端框架:springboot、mybaits 数 据 库:MySQL
41 4
Java医院绩效考核系统源码:关于医院绩效考核系统的技术架构、系统功能、如何选择医院绩效考核管理系统
|
2月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
搜索推荐 Java API
如何在Java应用中实现全文搜索功能
如何在Java应用中实现全文搜索功能
|
2月前
|
SQL XML JavaScript
【若依Java】15分钟玩转若依二次开发,新手小白半小时实现前后端分离项目,springboot+vue3+Element Plus+vite实现Java项目和管理后台网站功能
摘要: 本文档详细介绍了如何使用若依框架快速搭建一个基于SpringBoot和Vue3的前后端分离的Java管理后台。教程涵盖了技术点、准备工作、启动项目、自动生成代码、数据库配置、菜单管理、代码下载和导入、自定义主题样式、代码生成、启动Vue3项目、修改代码、以及对代码进行自定义和扩展,例如单表和主子表的代码生成、树形表的实现、商品列表和分类列表的改造等。整个过程详细地指导了如何从下载项目到配置数据库,再到生成Java和Vue3代码,最后实现前后端的运行和功能定制。此外,还提供了关于软件安装、环境变量配置和代码自动生成的注意事项。
1189 2
|
2月前
|
Java Spring
Java演进问题之Spring框架使用技术实现其核心功能如何解决
Java演进问题之Spring框架使用技术实现其核心功能如何解决