google,baidu suggest

//定义全局变量
var hilgindex = -1;
var timeTmid;
$(document).ready(function () {
    //先将DIV隐藏
    var wordInput = $("#word");
    var wordInputOffset = wordInput.offset();
    $("#auto").hide().css("border", "1px black solid").css("position", "absolute")
            .css("top", wordInputOffset.top + wordInput.height() + 1 + "px")
            .css("left", wordInputOffset.left + "px").width(wordInput.width())
            .css("font-size","14px").css("z-index","100").css("background-color","white");
    //给文本框加键盘按下弹起事件
    wordInput.keyup(function(event) {
        //处理键盘事件 重点
        //获取键盘按下的键
        var myEvent = event || window.event;
        var keyCode = myEvent.keyCode;
        //如果输入的是字母,应该将文本框最新的内容发送给服务器
        //如果输入的是退格键 或 是DEL键 也应该将文本框最新的内容发送给服务器
        if (keyCode >= 65 && keyCode <= 90 || keyCode == 8 || keyCode == 46) {
            //1先获取文本狂的内容 并处理中文乱码问题  两次处理之后 能够在不同环境下 处理中文乱码问题
            var wordText =$("#word").css("position", "relative").val();
            var autoNode = $("#auto");
            //2将文本框的内容发送到服务器
            if (wordText != "") {
                //清除上次未完成的延时操作
                clearTimeout(timeTmid);
                //d对服务端要延迟500ms 避免快速打字造成多次请求服务器
                timeTmid = setTimeout(function() {
                    $.post("/xddshopping/Product?method=test", {word:wordText}, function(data) {
                        //将dom对象data转换成JQuery的对象
                        var jqueryObj = $(data);
                        //找到所有的word节点
                        var wordNodes = jqueryObj.find("word");
                        // alert(wordNodes+"=========")
                        //遍历所有word节点 取出数据,然后将数据填充到弹出框

                        //这里要清空原内容
                        autoNode.html("");
                        wordNodes.each(function(i) {
                            //取出数据
                            var wordNode = $(this);
                            //新建div节点 将数据添加到节点中
                            //将新建的节点添加到弹出框中
                            var newDivNode = $("<div>").css("margin-top","5px").css("text-align","left").attr("id", i);
                            newDivNode.html(wordNode.text()).appendTo(autoNode);
                            //增加鼠标事件  进入改变背景颜色
                            newDivNode.mouseover(function() {
                                //将原来的被选择的取消
                                if (hilgindex != -1) {
                                    $("#auto").children("div").eq(hilgindex).css("background-color", "white")
                                }
                                //记录新的被选中
                                hilgindex = $(this).attr("id");
                                $(this).css("background-color", "gray");
                            });
                            //鼠标移出事件
                            newDivNode.mouseout(function() {
                                //取消被选中的
                                $(this).css("background-color", "white");
                            });
                            //增加鼠标点击事件
                            newDivNode.click(function() {
                                //取出被选中的内容
                                var comText = $(this).text();
                                $("#auto").hide();
                                hilgindex = -1;
                                //w文本狂的内容要变成所选的内容
                                $("#word").val(comText);
                            });


                        });
                        if (wordNodes.length > 0) {
                            autoNode.show();
                        } else {
                            //当弹出框隐藏式  被选择的内容应该为-1
                            autoNode.hide();
                            hilgindex = -1;
                        }

                    }, "xml");
                }, 500)
            } else {
                autoNode.hide();
                hilgindex = -1;
            }
        } else if (keyCode == 38) {
            //如果按下的是向上键 38
            var autoNodes = $("#auto").children("div")
            if (hilgindex != -1) {
                //如果没被选中 将内容的Div给白色
                autoNodes.eq(hilgindex).css("background-color", "white");
                hilgindex--;
            } else {
                hilgindex = autoNodes.length - 1;
            }
            if (hilgindex == -1) {
                //如果到顶端 或到最下端  就-1
                hilgindex = autoNodes.length - 1;
            }
            // 如果 正常  将被选择的的内容背景给灰色
            autoNodes.eq(hilgindex).css("background-color", "gray")
             var comText = $("#auto").children("div").eq(hilgindex).text();
            $("#word").val(comText)
        } else if (keyCode == 40) {
            //向下的建 40
            var autoNodes = $("#auto").children("div")
            if (hilgindex != -1) {
                //如果没被选中 将内容的Div给白色
                autoNodes.eq(hilgindex).css("background-color", "white");
            }
            hilgindex++;
            if (hilgindex == autoNodes.length) {
                //如果到顶端 或到最下端  就-1
                hilgindex = 0;
            }
            // 如果 正常  将被选择的的内容背景给灰色
            autoNodes.eq(hilgindex).css("background-color", "gray")
            var comText = $("#auto").children("div").eq(hilgindex).text();
            $("#word").val(comText)
        } else if (keyCode == 13) {
            //如果输入的是回车

            //下拉框有内容被选择
            if (hilgindex != -1) {
                //取出被选中的内容
                var comText = $("#auto").hide().children("div").eq(hilgindex).text();
                hilgindex = -1;
                //w文本狂的内容要变成所选的内容
                $("#word").val(comText)
            } else {
                //w文本狂的内容要变成所选的内容
                alert("文本框的的值[" + $("#word").val() + "]被提交了")
                $("#auto").hide();
                //让文本框失去焦点
                $("#word").get(0).blur();
            }
        }
    });
    //给按钮一个事件
    $("input[name='secth']").click(function() {
       var comText=encodeURI($("#word").val());
       //alert(comText)
       window.location.href='/xddshopping/Reveal?method=proname&pname='+comText;
    });
});

2.autoxml.jsp文件内容 在这个文件中,我们只把他作为数据中转

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
 contentType="text/xml; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
<!--返回xml数据的-->
<words>
 <c:forEach items="${requestScope.word}" var="pro">
 <word>${pro}</word>
</c:forEach>
</words>

3.servlet的类调用业务类的方法

public void test(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
  response.setHeader("Cache-Control", "no-cache");
  response.setContentType("text/xml;charset=utf-8");
  PrintWriter out = response.getWriter();
  
      String word=request.getParameter("word");
         PageUtil pageUtil=new PageUtil();
         pageUtil.setPageno(1);
         pageUtil.setPagesize(20);
         word=StringUtil.concert(word);
   ProductBiz.search(pageUtil, " pletter like '"+word+"%' or  pname like '"+word+"%'");
   
   List<ProductBean> list = pageUtil.getList();
   List pro=new ArrayList();
   String src=p.getPname();
   pro.add(src);
       
   }
   request.setAttribute("word",pro);
        request.getRequestDispatcher("/xml/xmlauto.jsp").forward(request,response);
 }

原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1736727.html