基于jquery的搜索框输入提示

仿百度与google的搜索框输入提示,支持键盘上下选择与鼠标点击选择。只包含前面代码,后台返回数据为模拟的数据。 

1.未输入前的效果

2.输入内容后,自动弹出下拉层,里面有若干匹配输入内容的输入建议项

3.按下键盘的↑↓键可以在下面的输入提示项中进行选择,选中的项自动将文字填补到搜索输入框中(如图),也可以用鼠标点击来选中项。


4.代码  index.html

[html]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>搜索</title>  
  6. <meta name="description" content=" 内容介绍不超过100个中文">  
  7. <meta name="keywords" content=" 内容相关关键词3-5个">  
  8. <link href="index.css" rel="stylesheet" type="text/css" />  
  9.   
  10. <script type="text/javascript" src="jquery-1.4.3.min.js"></script>  
  11. </head>  
  12.   
  13. <body>  
  14.   
  15.     <div class="gover_search">  
  16.         <div class="gover_search_form clearfix">  
  17.             <span class="search_t">关键词匹配搜索</span>  
  18.             <input type="text" class="input_search_key" id="gover_search_key" placeholder="请输入关键词直接搜索" />  
  19.             <button type="submit" class="search_btn">搜索</button>  
  20.             <div class="search_suggest" id="gov_search_suggest">  
  21.                 <ul>  
  22.                 </ul>  
  23.             </div>  
  24.         </div>  
  25.     </div>  
  26.   
  27. <script type="text/javascript">  
  28.   
  29. //实现搜索输入框的输入提示js类  
  30. function oSearchSuggest(searchFuc){  
  31.     var input = $('#gover_search_key');  
  32.     var suggestWrap = $('#gov_search_suggest');  
  33.     var key = "";  
  34.     var init = function(){  
  35.         input.bind('keyup',sendKeyWord);  
  36.         input.bind('blur',function(){setTimeout(hideSuggest,100);})  
  37.     }  
  38.     var hideSuggest = function(){  
  39.         suggestWrap.hide();  
  40.     }  
  41.       
  42.     //发送请求,根据关键字到后台查询  
  43.     var sendKeyWord = function(event){  
  44.           
  45.         //键盘选择下拉项  
  46.         if(suggestWrap.css('display')=='block'&&event.keyCode == 38||event.keyCode == 40){  
  47.             var current = suggestWrap.find('li.hover');  
  48.             if(event.keyCode == 38){  
  49.                 if(current.length>0){  
  50.                     var prevLi = current.removeClass('hover').prev();  
  51.                     if(prevLi.length>0){  
  52.                         prevLi.addClass('hover');  
  53.                         input.val(prevLi.html());  
  54.                     }  
  55.                 }else{  
  56.                     var last = suggestWrap.find('li:last');  
  57.                     last.addClass('hover');  
  58.                     input.val(last.html());  
  59.                 }  
  60.                   
  61.             }else if(event.keyCode == 40){  
  62.                 if(current.length>0){  
  63.                     var nextLi = current.removeClass('hover').next();  
  64.                     if(nextLi.length>0){  
  65.                         nextLi.addClass('hover');  
  66.                         input.val(nextLi.html());  
  67.                     }  
  68.                 }else{  
  69.                     var first = suggestWrap.find('li:first');  
  70.                     first.addClass('hover');  
  71.                     input.val(first.html());  
  72.                 }  
  73.             }  
  74.               
  75.         //输入字符  
  76.         }else{   
  77.             var valText = $.trim(input.val());  
  78.             if(valText ==''||valText==key){  
  79.                 return;  
  80.             }  
  81.             searchFuc(valText);  
  82.             key = valText;  
  83.         }             
  84.           
  85.     }  
  86.     //请求返回后,执行数据展示  
  87.     this.dataDisplay = function(data){  
  88.         if(data.length<=0){  
  89.             suggestWrap.hide();  
  90.             return;  
  91.         }  
  92.           
  93.         //往搜索框下拉建议显示栏中添加条目并显示  
  94.         var li;  
  95.         var tmpFrag = document.createDocumentFragment();  
  96.         suggestWrap.find('ul').html('');  
  97.         for(var i=0; i<data.length; i++){  
  98.             li = document.createElement('LI');  
  99.             li.innerHTML = data[i];  
  100.             tmpFrag.appendChild(li);  
  101.         }  
  102.         suggestWrap.find('ul').append(tmpFrag);  
  103.         suggestWrap.show();  
  104.           
  105.         //为下拉选项绑定鼠标事件  
  106.         suggestWrap.find('li').hover(function(){  
  107.                 suggestWrap.find('li').removeClass('hover');  
  108.                 $(this).addClass('hover');  
  109.           
  110.             },function(){  
  111.                 $(this).removeClass('hover');  
  112.         }).bind('click',function(){  
  113.             input.val(this.innerHTML);  
  114.             suggestWrap.hide();  
  115.         });  
  116.     }  
  117.     init();  
  118. };  
  119.   
  120. //实例化输入提示的JS,参数为进行查询操作时要调用的函数名  
  121. var searchSuggest =  new oSearchSuggest(sendKeyWordToBack);  
  122.   
  123. //这是一个模似函数,实现向后台发送ajax查询请求,并返回一个查询结果数据,传递给前台的JS,再由前台JS来展示数据。本函数由程序员进行修改实现查询的请求  
  124. //参数为一个字符串,是搜索输入框中当前的内容  
  125. function sendKeyWordToBack(keyword){  
  126.        /*  var obj = {  
  127.                 "keyword" : keyword  
  128.              };  
  129.              $.ajax({  
  130.                        type: "POST",  
  131.                        url: "${ctx}/front/suqiu2/search/prompt-keyword.action",  
  132.                        async:false,  
  133.                        data: obj,  
  134.                        dataType: "json",  
  135.                        success: function(data){  
  136.                          //var json = eval("("+data+")");  
  137.                          var key=data.split(",");  
  138.                          var aData = [];  
  139.                          for(var i=0;i<key.length;i++){  
  140.                                 //以下为根据输入返回搜索结果的模拟效果代码,实际数据由后台返回  
  141.                             if(key[i]!=""){  
  142.                                   aData.push(key[i]);  
  143.                             }  
  144.                          }  
  145.                         //将返回的数据传递给实现搜索输入框的输入提示js类  
  146.                          searchSuggest.dataDisplay(aData);  
  147.                        }  
  148.          });      */  
  149.                
  150.                 //以下为根据输入返回搜索结果的模拟效果代码,实际数据由后台返回  
  151.                 var aData = [];  
  152.                 aData.push(keyword+'返回数据1');  
  153.                 aData.push(keyword+'返回数据2');  
  154.                 aData.push(keyword+'不是有的人天生吃素的');  
  155.                 aData.push(keyword+'不是有的人天生吃素的');  
  156.                 aData.push(keyword+'2012是真的');  
  157.                 aData.push(keyword+'2012是假的');  
  158.                 //将返回的数据传递给实现搜索输入框的输入提示js类  
  159.                 searchSuggest.dataDisplay(aData);  
  160.       
  161. }  
  162.   
  163. </script>  
  164. </body>  
  165. </html>  

index.css

[html]  view plain  copy
  1. @charset "utf-8";  
  2. /* CSS Document */  
  3.   
  4. body, ul, li {  
  5.     margin: 0;  
  6.     padding: 0;  
  7. }  
  8. body{   
  9.     font-size:12px;   
  10.     font-family:sumsun,arial;  
  11.     color:#666666;  
  12.     background:#FFFFFF;  
  13. }  
  14.   
  15.   
  16.   
  17. .gover_search{ position:relative; z-index:99; height:63px; padding:15px 0 0 20px; border:1px solid #b8cfe6; border-bottom:0; background:url(../images/gover_search_bg.gif) repeat-x 0 0;}  
  18. .gover_search_form{height:36px;}  
  19. .gover_search .search_t{ float:left; width:112px; line-height:26px; color:#666666;}  
  20. .gover_search .input_search_key{ float:left; width:462px; height:18px; padding:3px; margin-right:5px; border:1px solid #cccccc; line-height:18px; background:#FFFFFF;}  
  21. .gover_search .search_btn{ float:left; width:68px; height:26px; overflow:hidden; border:1px solid #cccccc; text-align:center; color:#ff3300; letter-spacing:5px; background:url(../images/gover_search_bg.gif) no-repeat 0 -79px; cursor:pointer; font-weight:bold;}  
  22. .gover_search .search_suggest{ position:absolute; z-index:999; left:132px; top:41px; width:468px; border:1px solid #999999; display:none; }  
  23. .gover_search .search_suggest li{height:24px; overflow:hidden; padding-left:3px; line-height:24px; background:#FFFFFF; cursor:default;}  
  24. .gover_search .search_suggest li.hover{background:#DDDDDD;}  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值