java web在不使用任何插件情况下实现文本框输入自动补全功能

java web在不使用任何插件情况下实现文本框输入自动补全功能

 
  
前台部分:
[html]  view plain  copy
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  2. <html>  
  3.   <head>  
  4.     <title>word.html</title>  
  5.       
  6.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  7.     <meta http-equiv="description" content="this is my page">  
  8.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  9.       
  10.     <script type="text/javascript" src="js/jquery.js"></script>  
  11.     <script type="text/javascript" src="js/auto.js"></script>  
  12.   </head>  
  13.     
  14.   <body>  
  15.    suggest:<input id="word" type="text" />  
  16.    <input type = "button" value="提交" />可以尝试输入大写字母"A、B、T"将有提示  
  17.      
  18.    <div id = "auto"> </div>  
  19.   </body>  
  20. </html>  
JS部分:
[javascript]  view plain  copy
  1. $(document).ready(function(){   //一开始加载方法  
  2.     var highlightindex = -1;///高亮显示的变量值(0-n) 初始-1即无任何 子div 被选中  
  3.     var timeout;///服务器交互延迟  
  4.     var wordInput = $("#word"); //输入框节点  
  5.     var wordInputOffset = wordInput.offset(); //获取输入框的属性函数  
  6.     var autoNode = $("#auto");//初始的auto div节点  
  7.   
  8.     autoNode.hide();//隐藏  
  9.     autoNode.css("position","absolute"); //相对于其最接近的一个最有定位设置的父对象(wordInput)进行绝对定位  
  10.     autoNode.css("z-index","99");//处于顶层  
  11.     autoNode.css("cursor","default");//鼠标样式  
  12.     autoNode.css("filter","alpha(opacity=50");//透明度  
  13.     autoNode.css("text-overflow","clip");//内容过多时不显示省略标记(...),而是简单的裁切   
  14.     autoNode.css("border","1px black solid");//边框  
  15.     autoNode.css("top",wordInputOffset.top+wordInput.height()+4+"px");//设置高 以ie8 作为标准  
  16.     autoNode.css("left",wordInputOffset.left-2+"px").width(wordInput.width()+5);//设置左边与宽  
  17.     //当使用到项目中,会发现弹出框的背景色是透明的,需要这里设置一下  
  18.     //autoNode.css("background-color","red");       //设置弹出框的背景色  
  19.                                           
  20.     wordInput.blur(function()   ///失去焦点时促发  
  21.     {  
  22.         setTimeout(function() //延时200毫秒以便 鼠标的点击事件能执行  
  23.         {  
  24.              autoNode.hide();  
  25.              highlightindex = -1;  
  26.         },200);  
  27.     });   
  28.           
  29.     wordInput.keyup(function(event)//键盘按下  
  30.     {  
  31.         var myEvent = event || window.event;    //不同浏览器选不同事件  
  32.         var keyCode = myEvent.keyCode;//键盘按下的 值  
  33.               
  34.         if(keyCode>=48&&keyCode<=57||keyCode >= 65 && keyCode <= 90 || keyCode==8 || keyCode ==46||keyCode==13||keyCode==32)//是英文 或退格或删除键都进与服务器交互  
  35.         {  
  36.             var textInput = wordInput.val();//获取输入框的值  
  37.             if(textInput != "" ) //输入不为空  
  38.             {  
  39.                 clearTimeout(timeout);//清空前一次的倒数时间  
  40.                 timeout = setTimeout(function(){ //延迟与服务器交互时间提高效率  
  41.                     $.post("servlet/InputServlet",{text:textInput},function(data) //与服务器交互 采用xml返回格式  
  42.                     {  
  43.                         var jqueryObj = $(data);//获取返回值节点  
  44.                         var wordNodes = jqueryObj.find("word"); //找到返回的所有xml-word节点 <word>...</word> 节点可自己在服务端定义  
  45.                         autoNode.html("");//清空内容防止div里面重复  
  46.           
  47.                         wordNodes.each(function(i)//遍历所有的word节点 变量i从 0-n  
  48.                         {  
  49.                             var wordNode = $(this);//获取当前的word节点   
  50.                             var NewNode = $("<div>").attr("id",i);//新建一个div节点 并给以id属性且等于i值  
  51.                                   
  52.                             NewNode.html(wordNode.text()).appendTo(autoNode);//把word节点的内容赋给div节点 并把div追加到(相当于内容插入) autoNode节点的div  
  53.                      
  54.                             NewNode.hover(//鼠标事件  
  55.                                 function()//鼠标移到  
  56.                                 {  
  57.                                     if(highlightindex !=-1)  
  58.                                     {   //鼠标键盘一起用时防止同时高亮  
  59.                                         autoNode.children().eq(highlightindex).css("background-color","white");  
  60.                                     }  
  61.                                         highlightindex = $(this).attr("id"); //把id值赋给highlightindex  
  62.                                         $(this).css("background-color","gray");  
  63.                                 },  
  64.                                 function(){//鼠标移走  
  65.                                     $(this).css("background-color","white");                    
  66.                                 }  
  67.                             );  
  68.                             NewNode.click(function()//点击鼠标时  
  69.                             {  
  70.                                 var clickNode = $(this); //获取当前鼠标节点  
  71.                                 wordInput.val(clickNode.text());//赋值给输入框  
  72.                                 autoNode.hide();  
  73.                                 highlightindex =-1;  
  74.                                 //....此处可以放点击鼠标选定项时触发的函数  
  75.                             });  
  76.                         });  
  77.                         if(wordNodes.length>0) //有返回值才显示  
  78.                         {  
  79.                             autoNode.show();  
  80.                         }  
  81.                         else//返回为空隐藏  
  82.                         {  
  83.                             autoNode.hide();  
  84.                         }  
  85.                     },"xml");//.post里的方法结束  
  86.                 },500);//延时方法结束  
  87.             }  
  88.             else//输入为空隐藏div节点autoNode 不与服务器交互  
  89.             {  
  90.                 autoNode.hide();  
  91.                 highlightindex = -1;  
  92.             }  
  93.         }  
  94.         else if(keyCode ==38 || keyCode ==40)  
  95.         {  
  96.             var autoNodes = autoNode.children();//获取autoNodes div下的所有子节点  
  97.             if(keyCode == 38)//向上  
  98.             {  
  99.                 if(highlightindex != -1)//不为-1 原来有节点被选中  
  100.                 {  
  101.                     autoNodes.eq(highlightindex).css("background-color","white");//改变原来背景色 白色  
  102.                     highlightindex--; //减一 向上移到  
  103.                 }  
  104.                   
  105.                 if(highlightindex == -1){ //为-1 即原来值为0到顶端了  
  106.                     highlightindex = autoNodes.length - 1;//直接把变量改为最后一个 (注意长度length是1-n,而highlightindex 0-n)  
  107.                 }  
  108.                 autoNodes.eq(highlightindex).css("background-color","gray");//改变新选中的div背景色 蓝色  
  109.                 wordInput.val(autoNodes.eq(highlightindex).text()); //直接赋值给输入框  
  110.             }  
  111.             if(keyCode == 40)//向下  
  112.             {  
  113.                 if(highlightindex!=-1)//不为-1 原来有节点被选中  
  114.                 {  
  115.                     autoNodes.eq(highlightindex).css("background-color","white");//改变原来选中div背景色   
  116.                     highlightindex++; //加1 即向下移动  
  117.                 }  
  118.               
  119.                 if(highlightindex==-1)//为-1及可加   
  120.                     {  
  121.                         highlightindex++;  
  122.                     }  
  123.         
  124.                      if(highlightindex == autoNodes.length)//加1后等于 子div节点长度到达底端    
  125.                 {  
  126.                     highlightindex = 0;//把顶端值赋给highlightindex  
  127.                 }  
  128.                   
  129.                 autoNodes.eq(highlightindex).css("background-color","gray"); //改变背景色  
  130.                 wordInput.val(autoNodes.eq(highlightindex).text()); //直接赋值给输入框  
  131.             }  
  132.         }  
  133.         else if(keyCode==13)//回车  
  134.         {  
  135.             autoNode.hide();//隐藏div  
  136.             highlightindex = -1;//高亮变量恢复默认值  
  137.             //....................//可作提交操作    
  138.         }  
  139.     });  
  140. });  
后台部分:
[java]  view plain  copy
  1. package servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. public class InputServlet extends HttpServlet  
  13. {  
  14.     public void doGet(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException  
  15.     {  
  16.         request.setCharacterEncoding("utf-8");  
  17.         String text = request.getParameter("text");//获取页面发来的text变量  
  18.         System.out.println(text);  
  19.         List<String> word = new ArrayList<String>();  
  20.         List<String> list = new ArrayList<String>();//用集合方式存放提示关键字  实际应该从数据库中取  
  21.         list.add("Google");  
  22.         list.add("NetEase");  
  23.         list.add("Sohu");  
  24.         list.add("Sina");  
  25.         list.add("Sogou");  
  26.         list.add("Baidu");  
  27.         list.add("Tencent");  
  28.         list.add("Taobao");  
  29.         list.add("Tom");  
  30.         list.add("Yahoo");  
  31.         list.add("JavaEye");  
  32.         list.add("Csdn");  
  33.         list.add("Alipay");  
  34.   
  35.         for (int i = 0; i < list.size(); i++)//循环对比提示关键字与输入文本  
  36.         {  
  37.             if (list.get(i).startsWith(text))//判断输入文本是否与关键字文本开头相同  
  38.             {  
  39.                 word.add(list.get(i)); //存放到word的集合中  
  40.             }  
  41.         }  
  42.         request.setAttribute("word", word);//放入Request中  
  43.         request.getRequestDispatcher("/wordxml.jsp").forward(request, response);//跳转到wordxml.jsp  
  44.     }  
  45.   
  46.     public void doPost(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException  
  47.     {  
  48.         doGet(request, response);  
  49.     }  
  50. }  
 资源下载地址:http://download.csdn.net/detail/sunny0703/7690327
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值