基于JQuery和DWR的自动补全

后台我用DWR进行异步数据传递:

代码很简单,就是返回一个数组,如果需求不同可以自己修改:

Java代码    收藏代码
  1. package org.dwr.re;  
  2. /** 
  3.  * 测试 返回数组 
  4.  * @author 崔素强 
  5.  */  
  6. public class BackArray {  
  7.     public String[] backArr() {  
  8.         String[] arr = new String[] { "坚持""就是""胜利" };  
  9.         return arr;  
  10.     }  
  11. }  

 

前台记得导入DWR的JS,和JQuery的JS,然后写文本框的输入事件:

Html代码    收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">      
  10.     <title>自动补全</title>  
  11.     <script type='text/javascript' src='/buquan/dwr/util.js'></script>  
  12.     <script type='text/javascript' src='/buquan/dwr/engine.js'></script>  
  13.     <script type='text/javascript' src='/buquan/dwr/interface/arr.js'></script>  
  14.     <script type="text/javascript" src="jquery-1.4.2.min.js"></script>  
  15.     <script type="text/javascript">         
  16.     var highlightindex = -1; //高亮节点  
  17.     var timeOutId;  
  18.     $(document).ready(function() {    
  19.     var wordInput = $("#keyText"); //文本框值     
  20.     var wordInputwordInputOffset = wordInput.offset(); //文本框属性  
  21.     //初始时层隐藏,并设置它的样式,位置  
  22.     $("#auto").hide().css("border","1px black solid")  
  23.         .css("position","absolute")  
  24.         .css("top",wordInputOffset.top + wordInput.height() + 5 + "px")  
  25.         .css("left",wordInputOffset.left + "px")  
  26.         .width(wordInput.width() + 5);      
  27.     //文本框事件  
  28.     $("#keyText").keyup(function(){  
  29.         var myEvent = event || window.event;  
  30.         var keyCode = myEvent.keyCode; //取得按键的值  
  31.         var autoNode = $("#auto");  
  32.         //输入字母等的情况,包括回车,delete  
  33.         if (keyCode >= 65 && keyCode <= 90 || keyCode == 8 || keyCode == 46) {  
  34.             autoNode.html("");            
  35.             var wordText=$("#keyText").val(); //当前文本框值  
  36.             if (wordText != ""){  
  37.                 //将上一次没有完成的请求清除  
  38.                 clearTimeout(timeOutId);  
  39.                 //将请求延迟  
  40.                 timeOutId = setTimeout(function(){  
  41.                     //使用DWR返回数据,暂时没有设置参数,返回一个字符串数组即可  
  42.                     arr.backArr(function back(data){  
  43.                         for(i = 0;i < data.length;i++){    
  44.                             var newDiv = $("<div>").attr("id",i); // 增加标识                                       
  45.                             newDiv.html(data[i]).appendTo(autoNode); //创建新的节点到原DIV元素  
  46.                             //鼠标移入事件  
  47.                             newDiv.mouseover(function(){  
  48.                                 if(highlightindex != -1){  
  49.                                     $("#auto").children("div").eq(highlightindex)  
  50.                                     .css("background-color","white");  
  51.                                 }  
  52.                                 //增加一个属性  
  53.                                 highlightindex = $(this).attr("id");  
  54.                                 //当前设为红色  
  55.                                 $(this).css("background-color","red");  
  56.                             });  
  57.                             //鼠标移出事件  
  58.                             newDiv.mouseout(function(){  
  59.                                 //当前清除颜色  
  60.                                 $(this).css("background-color","white");  
  61.                             });  
  62.                             //鼠标单击事件  
  63.                             newDiv.click(function(){  
  64.                                 //取出高亮节点的文本内容  
  65.                                 var comText = $("#auto").hide().children("div").eq(highlightindex).text();  
  66.                                 highlightindex = -1;  
  67.                                 //文本框中的内容变成高亮节点的内容  
  68.                                 $("#keyText").val(comText);  
  69.                             });  
  70.                         }  
  71.                         if (data.length > 0){                          
  72.                             autoNode.show();  
  73.                         }else{  
  74.                             autoNode.hide();  
  75.                         }  
  76.                     });  
  77.                 },500); //延迟处理  
  78.             } else {                  
  79.                 autoNode.hide();  
  80.             }  
  81.             highlightindex = -1;  
  82.         } else if (keyCode == 38 || keyCode == 40) {  
  83.             if (keyCode == 38) { //向上                  
  84.                 var autoNodes = $("#auto").children("div")  
  85.                 if (highlightindex != -1) {  
  86.                     //如果原来存在高亮节点,则将背景色改称白色  
  87.                     autoNodes.eq(highlightindex).css("background-color","white");  
  88.                     highlightindex--;  
  89.                 } else {  
  90.                     highlightindex = autoNodes.length - 1;      
  91.                 }  
  92.                 if (highlightindex == -1) {  
  93.                     //如果修改索引值以后index变成-1,则将索引值指向最后一个元素  
  94.                     highlightindex = autoNodes.length - 1;  
  95.                 }  
  96.                 //让现在高亮的内容变成红色  
  97.                 autoNodes.eq(highlightindex).css("background-color","red");  
  98.             }  
  99.             if (keyCode == 40) { //向下                  
  100.                 var autoNodes = $("#auto").children("div")  
  101.                 if (highlightindex != -1) {  
  102.                     //如果原来存在高亮节点,则将背景色改称白色  
  103.                     autoNodes.eq(highlightindex).css("background-color","white");  
  104.                 }  
  105.                 highlightindex++;  
  106.                 if (highlightindex == autoNodes.length) {  
  107.                     //如果修改索引值以后index变成-1,则将索引值指向最后一个元素  
  108.                     highlightindex = 0;  
  109.                 }  
  110.                 //让现在高亮的内容变成红色  
  111.                 autoNodes.eq(highlightindex).css("background-color","red");  
  112.             }  
  113.         } else if (keyCode == 13) {  
  114.              //下拉框有高亮内容  
  115.             if (highlightindex != -1) {  
  116.                 //取出高亮节点的文本内容  
  117.                 var comText = $("#auto").hide().children("div").eq(highlightindex).text();  
  118.                 highlightindex = -1;  
  119.                 //文本框中的内容变成高亮节点的内容  
  120.                 $("#keyText").val(comText);  
  121.             } else {  
  122.                 //下拉框没有高亮内容  
  123.                 alert("文本框中的[" + $("#keyText").val() + "]被提交了");  
  124.             }  
  125.         }  
  126.     });  
  127.     });  
  128.     </script>   
  129.   </head>    
  130.   <body>  
  131.     <input type="text" id="keyText" name="keyText" width="50px" />  
  132.     <div id="auto" align="left"></div>  
  133.   </body>  
  134. </html>  

 

当你输入时,会去后台查询并显示一些数据,你可以使用上下键来操作,回车时自动提交数据!

转自-http://cuisuqiang.iteye.com/blog/1541423<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值