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     }

  點擊進入演示地址,大家可以輸入長點的搜索,點擊搜索,再輸入之前搜索詞的前面部分,看是否能展示出來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM