自动补全功能(jquery应用5)

  A:编写服务端代码:AutoComplete.java

public class AutoComplete extends HttpServlet
{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
      //返回数据试图层(ajax)
       req.getRequestDispatcher("word.xml").forward(req, resp);
     }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        doGet(req, resp);
    }
    
}


 

  B:配置该servlet  web.xml

<servlet>
    <servlet-name>autoComplete</servlet-name>
    <servlet-class>com.itany.ajax.servler.AutoComplete</servlet-class>
  </servlet>
  
  <servlet-mapping>
     <servlet-name>autoComplete</servlet-name>
     <url-pattern>/autoComplete</url-pattern>
    </servlet-mapping>
   


  C:编写word.xml

<?xml version="1.0" encoding="UTF-8"?>
<words>
  <word>absolute</word>
 <word>anyone</word>
 <word>anything</word>
  <word>book</word>
  <word>boom</word>
  <word>apple</word>
  <word>abandon</word>
  <word>breach</word>
  <word>break</word>
  <word>boolean</word>
  <word>bold</word>
  <word>bride</word>
  <word>brown</word>
  <word></word>
 </words>


 

  D:编写页面:jqueryautocomplete.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.4.js"></script>
<script type="text/javascript" src="js/jqueryAuto2.js"></script>
<title>Insert title here</title>
</head>
<body>
<input id="word"/>
<input type="button" value="提交">
<br/><br/><br/><br/><br/><br/><br/>
<!-- 内容列表 -->
<div id="auto">
</div>
</body>
</html>


 

  E:编写js:jqueryAuto.js
    完善点1:通过js编写弹出框的样式
    完善点2:增加键盘(向上、向下选中、回车键)事件
  js:jqueryAuto.js----jqueryAuto1.js
    完善点3:解决滑动门问题
    在键盘输入过快时,不执行操作,给它一个延迟。
  js:jqueryAuto1.js----jqueryAuto2.js 
    

//定义当前高亮显示节点的下标索引
var highlightindex=-1;
//定义延时器变量
var timeoutid;
jQuery(function(){
 //alert(1);
 //找到下拉列表div
 var autoNode=$("#auto");
 //获取输入框对象
 var wordInput=$("#word");
 //创建输入框的偏移量对象
 var wordInputOffset = wordInput.offset();
 //隐藏该下拉框
 //设置弹出框的样式
 autoNode.hide().css("border","1px black solid")
 //.css("width",wordInput.width()+2+"px")
 .width(wordInput.width()+2+"px")
 .css("position","absolute")
 .css("left",wordInputOffset.left+"px")
 .css("top",wordInputOffset.top+wordInput.height()+5+"px");

 //对输入框绑定keyup事件
 wordInput.keyup(function(event){
  //判断输入框中是否输入a-z(65-90)、退格(8)、删除(46)
  //IE/FF
  var myEvent = event || window.event;
  var kcode = myEvent.keyCode;
  //alert(kcode);
  if ((kcode >= 65 && kcode <= 90 || kcode == 8 || kcode == 46)) {
   //alert(kcode);
   //alert(2);
   //获取输入框的内容
   var wordtext = wordInput.val();
   //如果输入框有内容,执行查询,显示下拉框,否则隐藏下拉框
   if (wordtext != "") {
    //取消延时器
    clearTimeout(timeoutid);
    //设置延迟器
    timeoutid = setTimeout(function(){
    //将该值发送到服务端
    $.post("autoComplete", null, function(data){
     //alert(data);
     var jqueryObj = $(data);
     //找到所有的word节点
     var wordnodes = jqueryObj.find("word");
     //alert(wordnodes.length);

     //清空原来的内容
     autoNode.html("");
     //遍历该集合
     wordnodes.each(function(){
      //获取当前值对象
      var wordnode = $(this);
      //alert(wordnode.text());
      //判断返回值是否以输入域的值开头
      if (wordnode.text().indexOf(wordtext) == 0) {
       //alert(wordnode.text());
       $("<div>").html(wordnode.text()).appendTo(autoNode);
      }
     });
     
     //如果服务器有返回,显示下拉列表
     if (wordnodes.length > 0) {
      autoNode.show();
     }
     
    });
    },1000);
    
   }
   else {
    autoNode.hide();
    //将索引值重置为-1
    highlightindex=-1;
   }
  }
  //向上键38
  else if(kcode==38){
   //获取div节点数组
   var autoNodes=autoNode.children("div");
   if(highlightindex==-1){
    //索引值为-1,将索引值指向最后一个元素
    highlightindex = autoNodes.length-1;
   }
   else{
    //如果原来存在高亮节点,则将其背景色还原成白色
    autoNodes.eq(highlightindex)
    .css("background-color","white");
    //索引键-1
    highlightindex--;
   }
   //让现在的这个记录背景色变成#eee
   autoNodes.eq(highlightindex)
   .css("background-color","#eee");
   
  }
  //向下键40
  else if(kcode==40){
   //获取div节点数组
   var autoNodes=autoNode.children("div");
   if(highlightindex!=-1){
    //将原来的节点背景色改成白色
    autoNodes.eq(highlightindex)
    .css("background-color","white");
   }
   highlightindex++;
   //最大值,则重新设置索引值为0
   if(highlightindex == autoNodes.length){
    highlightindex =0;
   }
   //将新节点的背景色改为#eee
   autoNodes.eq(highlightindex)
   .css("background-color","#eee");
  }
  //回车键13
  else if(kcode==13){
   //获取div节点数组
   var autoNodes=autoNode.children("div");
   //如果有高亮显示节点
   if(highlightindex!=-1){
    //取出高亮节点内容
    var comText=autoNodes.eq(highlightindex).text();
    highlightindex=-1;
    //在文本框中显示该高亮节点内容
    wordInput.val(comText);
    autoNode.hide();
   }
   else{
    //下拉框没有高亮内容
    alert("文本框中的【"+wordInput.val()+"】被提交了。");
    //让word输入框失去焦点
    wordInput.blur();
   }
  }
  
  
 });
 //给按钮绑定一个click事件,显示文本框中的数据已被提交
 $("input[type='button']").click(function(){
  //alert(1);
  alert("文本框中的【"+wordInput.val()+"】被提交了。");
 });
 
});


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值