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

下面贴出以前写的一个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();
    }
}

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

posted on 2014-05-11 22:00  Hux、Diy  阅读(2275)  评论(0编辑  收藏  举报