`

Ajax 提供自动完成

    博客分类:
  • AJAX
阅读更多

文件一览

  • autocomplete.html
  • AutoCompleteServlet.java
  • NameService.java

autocomplete.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax Auto Complete</title>
<style type="text/css">
	.mouseOut {
		background:#708090;
		color:#FFFAFA
	}
	.mouseOver {
		background:#FFFAFA
		color:#000000;
	}
</style>
<script type="text/javascript">
var xmlHttp;
var completeDiv;
var inputField;
var nameTable;
var nameTableBody;
function createXMLHttpRequest() {
	if (window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	}
}	
function initVars() {
	completeDiv = document.getElementById("popup");
	inputField = document.getElementById("names");
	nameTable = document.getElementById("name_table");
	nameTableBody = document.getElementById("name_table_body");
}
function findNames() {
	initVars();
	if (inputField.value.length>0) {
		createXMLHttpRequest();
		var url="AutoCompleteServlet?names="+escape(inputField.value);
		xmlHttp.open("GET",url,true);
		xmlHttp.onreadystatechange = callback;
		xmlHttp.send(null); 
	} else {
		clearNames();
	}
}
function callback() {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.status == 200) {
			//var name=xmlHttp.responseXML.getElementsByTagName("name")[0].firstChild.data;
			setNames(xmlHttp.responseXML.getElementsByTagName("name"));
		} else if (xmlHttp.status == 204) {
			clearNames();
		}
	}
}
function setNames(the_names) {
	clearNames();
	var size=the_names.length;
	setOffsets();
	var row,cell,txtNode;
	for (var i=0;i<size;i++) {
		var nextNode=the_names[i].firstChild.data;
		row = document.createElement("tr");
		cell =document.createElement("td");
		cell.onmouseout=function() {this.className='mouseOver';};
		cell.onmouseOver=function() {this.className='mouseOut'};
		cell.setAttribute("bgcolor","#FFFAFA");
		cell.setAttribute("border","0");
		cell.onclick=function() {populateName(this)};
		txtNode=document.createTextNode(nextNode);
		cell.appendChild(txtNode);
		row.appendChild(cell);
		nameTableBody.appendChild(row);
	}
}
function setOffsets() {
	var end = inputField.offsetWidth;
	var left = calculateOffsetLeft(inputField);
	var top = calculateOffsetTop(inputField)+inputField.offsetHeight;
	completeDiv.style.border="black 1px solid";
	completeDiv.style.left=left+"px";
	completeDiv.style.top=top+"px";
	nameTable.style.width=end+"px";
}
function calculateOffsetLeft(field) {
	return calculateOffset(field,"offsetLeft");
}
function calculateOffsetTop(field) {
	return calculateOffset(field,"offsetTop");
}
function calculateOffset(field,attr) {
	var offset = 0;
	while(field) {
		offset += field[attr];
		field = field.offsetParent;
	}
	return offset;
}
function populateName(cell) {
	inputField.value = cell.firstChild.nodeValue;
	clearNames();
}
function clearNames() {
	var ind = nameTableBody.childNodes.length;
	for (var i = ind -1;i>=0;i--) {
		nameTableBody.removeChild(nameTableBody.childNodes[i]);
	}
	completeDiv.style.border = "none";
}
</script>
</head>
<body>
<h1>Ajax Auto Complete Example</h1>
Name:<input type="text" size="20" id="names" onkeyup="findNames();" style="height:20;"/>
<div style="position:absolute;" id="popup">
	<table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0">
		<tbody id="name_table_body"></tbody>
	</table>
</div>
</body>
</html>

 AutoCompleteServlet.java

package ajaxbook.chap4;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AutoCompleteServlet extends HttpServlet {

	private List names = new ArrayList();
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String prefix = req.getParameter("names");
		NameService service = NameService.getInstance(names);
		List matching = service.findNames(prefix);
		if (matching.size()>0) {
			PrintWriter out = resp.getWriter();
			resp.setContentType("text/xml");
			resp.setHeader("Cache-Control", "no-cache");
			out.println("<response>");
			Iterator it = matching.iterator();
			while(it.hasNext()) {
				String name = (String)it.next();
				out.println("<name>"+name+"</name>");
			}
			out.println("</response>");
			matching = null;
			service = null;
			out.close();
		} else {
			resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
		}
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		names.add("Abe");
		names.add("Abel");
		names.add("Abigail");
		names.add("Abner");
		names.add("Abraham");
		names.add("Marcus");
		names.add("Marcy");
		names.add("Marge");
		names.add("Marie");
		
	}

}

 NameService.java

package ajaxbook.chap4;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class NameService {

	private List names;

	public NameService(List names) {
		this.names = names;
	}
	
	public static NameService getInstance(List names) {
		return new NameService(names);
	}
	
	public List findNames(String prefix) {
		String prefix_upper = prefix.toUpperCase();
		List matches = new ArrayList();
		Iterator it = names.iterator();
		while(it.hasNext()) {
			String name = (String)it.next();
			String name_upper_case = name.toUpperCase();
			if (name_upper_case.startsWith(prefix_upper)) {
				boolean result = matches.add(name);
			}
		}
		return matches;
	}
}

 运行效果参照附件:

  • 大小: 15.3 KB
分享到:
评论

相关推荐

    基于ajax的自动完成

    提供的DEMO文件可能包含了一个简单的Ajax自动完成的示例。通常,DEMO会包括HTML、JavaScript和ASP代码,以及可能的CSS样式文件。HTML文件用于展示界面和绑定事件;JavaScript文件实现Ajax逻辑,与服务器交互;ASP...

    ajax jsp 自动完成源代码

    总结来说,这个项目提供了一个实用的示例,展示了如何利用Ajax、JSP和Servlet技术实现一个无数据库的自动完成功能,对于学习和理解这些技术的应用有很好的参考价值。开发者可以通过研究这个源代码,学习到如何在实际...

    Ajax自动完成完美实现

    【Ajax自动完成技术详解】 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术使得用户可以与网页进行更流畅、更快捷的交互,提高了用户体验。在本...

    ajax控件自动完成(AutoComplete)

    **Ajax控件自动完成(AutoComplete)** Ajax控件自动完成是一种常见的前端技术,它显著提高了用户在网页上的交互体验,特别是在输入数据时。在网页的搜索框或用户登录界面,这种技术尤其有用,因为它能预测并显示...

    Ajax文本框自动完成示例

    这个文本框自动完成示例是Ajax技术的一个经典应用,它实现了用户在输入文本时,系统能够实时根据输入内容提供匹配建议,提高了用户体验,减少了用户输入的错误率。 在创建Ajax文本框自动完成示例时,我们需要考虑...

    基于Ajax的自动完成功能

    帮助用户快速的进行搜索,这类功能成为自动完成功能,这个功能目前在很多软件中实现,而web程序程序只能通过浏览器自身实现. 看完本项目,你将学习到如何实现基于ajax的自动完成功能,项目使用的是vs2003 ....

    基于ajax的自动完成功能[修改版本]

    看完本项目,你将学习到如何实现基于ajax的自动完成功能,本项目使用的是vs2003开发,直接解压到IIS目录下. 补充说明: 在上次项目的基础上进行的更新,把自动完成功能和textbox控件结合起来,成为一个自定义控件,...

    jsp+Ajax表单自动完成,和Google的搜索的差不多

    综上所述,"jsp+Ajax表单自动完成"是一个融合了前后端技术的交互式Web开发实践,它利用JSP处理服务器端逻辑,Ajax实现无刷新数据通信,以及JavaScript和相关库增强用户体验。通过这些技术,我们可以构建出类似Google...

    Java - Ajax自动补全

    1. **Ajax自动补全的基本原理**:自动补全功能通常用于搜索框或输入字段,当用户输入字符时,服务器会实时返回匹配的数据,这些数据可以是建议的搜索词、用户列表或其他相关信息。Ajax通过异步请求在后台处理这些...

    输入框 自动完成 AJAX

    标题中的“输入框自动完成AJAX”是一种常见的前端开发技术,用于提高用户在网页上的输入效率。自动完成功能,也称为自动填充或建议输入,它根据用户在输入框中键入的内容,动态地提供可能的匹配选项。这种功能在搜索...

    Ajax+JSON 搜索框自动完成提示功能

    标题 "Ajax+JSON 搜索框自动完成提示功能" 涉及的是网页开发中的一个常见技术,用于提高用户输入体验。Ajax(异步JavaScript和XML)是Web开发中的一种技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据...

    .net_Ajax文本框自动完成示例

    在本文中,我们将深入探讨如何使用Ajax实现文本框的自动完成功能,这通常是一个用户友好的特性,可以极大地提升用户体验。该示例中,我们将关注的关键知识点包括.NET框架、Ajax控件库、文本框事件处理以及与数据库的...

    c#ajax 自动完成控件实现自动搜索

    在C#和AJAX开发中,自动完成控件是一种常见的用户界面组件,它极大地提高了用户的输入效率和体验。这种控件通常用于搜索框,当用户输入文本时,它会实时地提供与输入相匹配的建议列表。在这个场景下,"c#ajax 自动...

    AJAX实例:根据邮编自动完成地址信息

    本实例将探讨如何利用AJAX根据用户输入的邮编实现自动完成地址信息的功能,这在地图应用、电子商务网站或任何需要地理位置信息的系统中都非常常见。 首先,我们要了解AJAX的基本工作原理。它通过JavaScript创建...

    AJAX自动完成功能

    在网页应用中,AJAX自动完成功能通常用于提升用户体验,比如在用户输入时,后台实时搜索匹配数据并显示在输入框下方,常见的应用场景如搜索引擎、表单字段填充等。这种功能可以显著减少用户输入的时间,提高数据输入...

    ajax实现自动完成功能带源码

    在网页开发中,自动完成(AutoComplete)功能是一种常见的用户体验优化技术,它允许用户在输入时获取...提供的源码应该包含了这些实现细节,你可以通过分析和调试源码来进一步理解AJAX自动完成的工作原理和实现方式。

    AJAX自动完成

    - **JavaScript库**:实现AJAX自动完成功能,常见的JavaScript库有jQuery、Prototype、Dojo等,它们提供了方便的API来操作DOM和发送AJAX请求。 - **前端框架**:现代前端框架如React、Vue或Angular也提供了构建此类...

    Ajax自动完成,GoogleSuggest。

    在本案例中,“Ajax自动完成”指的是在用户在表单的文本输入框中输入内容时,通过Ajax技术从服务器获取匹配的建议列表,以帮助用户快速、准确地填写信息。这种功能常见于搜索框、地址输入、用户名验证等场景,极大地...

    AJAX + C# 自动完成功能

    这个文件名暗示了压缩包中可能包含实现AJAX自动完成功能的代码示例、教程或库。可能包括HTML文件用于展示前端界面,JavaScript文件用于处理AJAX请求和DOM操作,以及C#代码文件处理服务器端逻辑。 在实现AJAX自动...

    仿google搜索ajax自动完成功能

    在网页开发中,实现“仿Google搜索”的AJAX自动完成功能是一项常见的需求。这个功能使得用户在输入搜索关键词时,无需点击搜索按钮,就能即时看到包含该关键词的相关搜索建议,极大地提升了用户体验。这里我们将深入...

Global site tag (gtag.js) - Google Analytics