zoukankan      html  css  js  c++  java
  • jquery实现百度类似搜索提示功能(AJAX应用)

    有时候觉得百度那个输入内容就有提示的工具很神奇,它究竟是怎么做到的呢?以前在一个进销存系统中也做过这么个功能,但是远远不及百度的功能强大,百度可以输入首字母,关键字拼音,或关键字都可以匹配,有时在想,是不是百度把相同的关键字代码存了三遍(首字母、拼音、字符串),还是不知道。。。。

    下面贴出以前写的一个demo代码,只是实现了文本框获取焦点回车出现提示,使用jquery实现,关于提示条目数量,样式,或者提示后面添加一个搜索结果数量,都可以自己调试出来实现。这个功能最开始是由于进销存系统的物品名称代码输入出现提示。

    效果图

    代码清单一:index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
      
      <script type="text/javascript" src="jquery.1.4.2.js"></script>
      <script type="text/javascript" src="js.js"></script>
      <script type="text/javascript">
      $(document).ready(function(){
      	$("#usName").bind($.browser.msie? "propertychange": "change",function (){
      	var url= "ajaxTest";
      	var id= "#usName";
      	var keyValue= $("#usName").val();
      	ajax(id,url,keyValue);});
      
     
      	$("#ame").bind($.browser.msie? "propertychange":"change",function (){
      	var url= "ajaxTest";
      	var id= "#ame";
      	var keyValue= $("#ame").val();
      	ajax(id,url,keyValue);});
    
      
      	$("#yy").bind($.browser.msie? "propertychange": "change",function (){
      	var url= "ajaxTest";
      	var id= "#yy";
      	var keyValue= $("#yy").val();
      	ajax(id,url,keyValue);});
      	
      	
      	$("#ss").bind($.browser.msie? "propertychange": "change",function (){
      	var url= "ajaxTest";
      	var id= "#ss";
      	var keyValue= $("#ss").val();
      	ajax(id,url,keyValue);});
      	
      	
      	$("#dd").bind($.browser.msie? "propertychange": "change",function (){
      	var url= "ajaxTest";
      	var id= "#dd";
      	var keyValue= $("#dd").val();
      	ajax(id,url,keyValue);});
      });
      </script>
      </head>
      <body>
        <input type="text" name="usName" id="usName"/>
                 
         <input type="text" name="ame" id="ame"/> 
                  
         
          <input type="text" name="yy" id="yy"/>
                   
         
          <input type="text" name="ss" id="ss"/>
                   
         
          <input type="text" name="dd" id="dd"/>
      </body>
    </html>
    

      框框多了点 好丑吧,

    代码清单2:导入的js文件  其实就是对HTML操作,给文本框定位,取到数据后在位置处下方创建表格(即提示的数据)

    var line = 0;
    function del() {
    	if ($("#newDiv")) {
    		$("#newDiv").remove();
    		line = 0;
    	}
    }
    $(document.body).click(function () {
    	del();
    });
    function ajax(id, url, keyValue) {
    	 $(document.body).click(function(){
                    del();
                });
    	var top = $(id).offset().top;
    	var left = $(id).offset().left;
    	var newDiv = $("<div/>").width($(id).width() + 6).css("position", "absolute").css("backgroundColor", "white").css("left", left).css("top", top + $(id).height() + 6).css("border", "1px solid blue").attr("id", "newDiv");
    	var table = $("<table border='1' width='100%'/>").attr("cellpadding", "0").attr("cellspacing", "0");
    	
    
    	$.post(url, {key:keyValue}, function (data) {
    		for(var i=0;i<data.result.length;i++){
    			var item = data.result[i];
                var key = item.key;
                var count = item.count;
                
                var tr = $("<tr/>").css("cursor","pointer").mouseout(function(){
                	$(this).css("backgroundColor","white").css("color","black");
                }).mouseover(function(){
                	$(this).css("backgroundColor","blue").css("color","white");
                }).click(function(){
                	$(id).val($(this).find("td").eq(0).html());
                	del();
                });
                var td = $("<td/>").html(key).css("fontSize","12px").css("color","green").css("margin","5 5 5 5");
                tr.append(td);
                table.append(tr);
                newDiv.append(table);
    		}
    	});
    		$(document.body).append(newDiv);
    		if(id.val()==""){
    			$("#newDiv").remove;
    		}
    }
    

      

    代码清单3:Ajaxtest.java 后台取到的数据以及接收的数据,这里是假数据

    package com;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.json.JSONObject;
    
    public class Ajaxtest extends HttpServlet {
        
        public void init() throws ServletException {
            // TODO Auto-generated method stub
            super.init();
        }
        
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            this.doGet(req, resp);
        }
        
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            resp.setContentType("text/json;charset=utf-8");
            req.setCharacterEncoding("utf-8");
            PrintWriter out = resp.getWriter();
            String key = req.getParameter("key");
            System.out.println(key);
            //生成一个JSONObject对象
            String data = "{}";
            JSONObject jsonObj = JSONObject.fromObject(data);
            
            List<Map> list = new ArrayList<Map>();
                    
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("key", "1");
            list.add(map);
            map  = new HashMap<String, Object>();
            map.put("key", "2");
            list.add(map);
            map  = new HashMap<String, Object>();
            map.put("key", "3");;
            list.add(map);
            map  = new HashMap<String, Object>();
            map.put("key", "4");
            list.add(map);
            map  = new HashMap<String, Object>();
            map.put("key", "5");
            list.add(map);
            map  = new HashMap<String, Object>();
            map.put("key", "6");
            list.add(map);
            jsonObj.put("result", list);
            System.out.println(jsonObj.toString());
            out.print(jsonObj.toString());   
            //这里应该从词库中查找,我在这里就做了假数据了
         
           
            out.flush();
            out.close();
        }
        
        public void destroy() {
            // TODO Auto-generated method stub
            super.destroy();
        }
    }

    会继续跟进这项技术,需要源代码留邮箱

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/huxdiy/p/3722375.html
Copyright © 2011-2022 走看看