• 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();
        }
    }

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

  • 相关阅读:
    safari兼容时间格式 NAN
    高阶组件
    SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
    SQL Server 触发器
    浅谈数据库中的触发器
    SQL Server 2008 表变量参数(表值参数)用法
    SQL Server 批量插入数据的两种方法
    SQL Server 2008 R2 主从数据库同步
    C#操作FTP, FTPHelper和SFTPHelper
    orcherd 汉化
  • 原文地址:https://www.cnblogs.com/huxdiy/p/3722375.html
Copyright © 2020-2023  润新知