`

jquery实例5:仿Google Suggest自动补齐

阅读更多
1.服务器端代码:

(1)AutoCompleteServlet.java源代码:
package servlet;

import java.io.IOException;

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

/**
 * 接收客户端请求
 * @author 大鹏
 */
public class AutoCompleteServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//表示页面传过来的字符串,用于和服务器端的单词进行完整匹配
		String word = request.getParameter("word");
		//将字符串保存在request作用域中
		request.setAttribute("word", word);
		//将请求转发给视图层(注意AJAX,这个所谓的视图层不返回页面,只返回数据,所以也可以称作一个数据层)
		request.getRequestDispatcher("wordxml.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}


(2)wordxml.jsp源代码:
<!-- 与传统应用的视图层不同,这个jsp返回的是xml的数据,因此contentType的值是text/xml -->
<%@ page import="java.util.*" contentType="text/xml; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 返回xml数据的"视图层"暂时不做任何逻辑,先将所有单词都返回,
待前后台应用可以协作之后,再限制返回的内容 -->
<%
	//页面段传送的字符串
	String word = (String)request.getAttribute("word");
	String[] words = {"absolute", "anyone", "anything", "apple", "abandon", "breach", "break", "boolean"};
	request.setAttribute("list", Arrays.asList(words));
%>
<words>
	<c:forEach items="${list}" var="aWord">
		<c:if test="${fn:startsWith(aWord, word)}">
			<word><c:out value="${aWord}"></c:out></word>
		</c:if>
	</c:forEach>
</words>

2.客户端程序

(1)JQueryAuto.html源代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="js/jquery-1.3.2.js"></script>
		<script type="text/javascript" src="js/jqueryauto.js"></script>
		<title>JQuery实例5:仿Google Suggest自动补齐</title>
	</head>
		
	<body>
		自动补完实例:<input type="text" id="word" />
		<input type="button" value="提示" /><br />
		<div id="auto"></div>
	</body>
</html>

(2)jqueryauto.js源代码:
$(document).ready(function() {
	//下拉列表框的块标记
	var autoNode = $("#auto");
	var wordInput = $("#word");
	//表示当前高亮的节点
	var highlightindex = -1;
	var timeoutId;
	//获取匹配元素在当前视口的相对偏移。
	//返回的对象包含两个整形属性:top 和 left。此方法只对可见元素有效。
	
	var wordInputOffset = wordInput.offset();
	//自动补全框开始应该隐藏起来
	autoNode.hide().css("border", "1px black solid").css("position", "absolute")
					.css("top", wordInputOffset.top + wordInput.height() + 5 + "px")
					.css("left", wordInputOffset.left + "px")
					.width(wordInput.width() + 2);
					
	//给文本框添加键盘按下并弹起的事件
	wordInput.keyup(function(event) {
		//处理文本框中的键盘事件
		//如果输入的是字母,应该将文本框中最新的信息发送给服务器
		var myEvent = event || window.event;
		var keyCode = myEvent.keyCode;
		//如果输入的是字母,应该将文本框中最新的信息发送给服务器
		//如果输入的是退格键或删除键,也应该将文本框中的最新信息发送给服务器
		if (keyCode >= 65 && keyCode <= 90 || keyCode == 8 || keyCode == 48){
			//1.首先获取文本框中的内容
			var wordText = wordInput.val();
			//如果内容不为空
			if (wordText != "") {
				//对上次未完成的延时操作进行取消
				clearTimeout(timeoutId);
				timeoutId = setTimeout(function() {
					$.post("AutoCompleteServlet", {word:wordText}, function(data) {
						//将dom对象data转换成JQuery的对象
						var jqueryObj = $(data);
						//找到所有的word节点
						var wordNodes = jqueryObj.find("word");
						//需要清空auto的内容
						autoNode.html("");
						//遍历所有的word节点,取出单词内容,然后将单词内容添加到弹出框中
						wordNodes.each(function(i) {
							//获取单词内容
							var wordNode = $(this);
							//新建div节点,将单词内容加入到新建的节点中
							//将新建的节点加入到弹出框的节点中
							var newDivNode = $("<div>");
							newDivNode.html(wordNode.text()).appendTo(autoNode);
							//鼠标进入事件,高亮节点
							newDivNode.mouseover(function() {
								// 将原来的结果取消高亮
								if (highlightindex != -1) {
									autoNode.children("div").eq(highlightindex)
										.css("background-color", "white");
								}
								//记录新的高亮索引
								highlightindex = i;
								//鼠标进入的节点高亮
								$(this).css("background-color", "red");
							});
							//增加鼠标移出事件,取消当前节点的高亮
							newDivNode.mouseout(function() {
								//取消鼠标移出节点的高亮
								$(this).css("background-color", "white");
							});
							//增加鼠标点击事件,可以进行补齐
							newDivNode.click(function() {
								//取出高亮节点的文本内容
								var comText = autoNode.hide().children("div").eq(highlightindex).text();
								highlightindex = -1;
								//文本框中的内容变成高亮节点的内容
								$("#word").val(comText);
							});
						});
						//如果服务器没有数据返回,则显示弹出框
						if(wordNodes.length > 0) {
							autoNode.show();
						} else {
							autoNode.hide();
						}
					},"xml");
				}, 200);
				
			} else {
				autoNode.hide();
				//弹出框隐藏的同时,高亮节点索引值也置为-1
				highlightindex = -1;
			}
		} else if (keyCode == 38 || keyCode == 40) {
			// 如果输入的是向上38向下40按键
			if (keyCode == 38) {
				//向上
				var autoNodes = autoNode.children("div");
				if (highlightindex != -1) {
					//如果原来存在高亮节点,则将背景色改成白色
					autoNodes.eq(highlightindex).css("background-color", "white");
					highlightindex --;
				}
				if (highlightindex == -1) {
					//如果修改索引值以后index变成-1,则将索引值指向最后一个元素
					highlightindex = autoNodes.length -1;
				}
				//让现在高亮的内容变成红色
				autoNodes.eq(highlightindex).css("background-color", "red");
			} else {
				//向下
				var autoNodes = autoNode.children("div");
				if (highlightindex != -1) {
					//如果原来存在高亮节点,则将背景色改成白色
					autoNodes.eq(highlightindex).css("background-color", "white");
				}
				highlightindex ++;
				if (highlightindex == autoNodes.length) {
					//如果修改索引值以后index变成节点的长度,则将索引值指向第一个元素
					highlightindex = 0;
				}
				//让现在高亮的内容变成红色
				autoNodes.eq(highlightindex).css("background-color", "red");
			}
			
		} else if (keyCode == 13) {
			// 如果输入的是回车
			// 下拉框有高亮内容
			if (highlightindex != -1) {
				//取出高亮节点的文本内容
				var comText = autoNode.hide().children("div").eq(highlightindex).text();
				highlightindex = -1;
				//文本框中的内容变成高亮节点的内容
				$("#word").val(comText);
			} else {
				//下拉框没有高亮内容
				alert("文本框中的[" + wordInput.val() + "]被提交了");
				autoNode.hide();
				//让文本框失去焦点
				wordInput.get(0).blur();
			}
		}
	});
	
	$("input[type='button']").click(function() {
		alert("文本框中的[" + wordInput.val() + "]被提交了");
	});
	
});


好了,现在所有的代码已经完成,看一下运行效果吧。


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

相关推荐

    AJAX学习总结(九)---Jquery实例:仿googlesuggest自动补全功能

    在本篇博客“AJAX学习总结(九)---Jquery实例:仿googlesuggest自动补全功能”中,作者分享了如何使用jQuery实现一个类似Google Suggest的自动补全功能,这是一种常见的前端交互设计,广泛应用于搜索框输入时提供...

    java与jQuery整合ajax仿googleSuggest自动补全实例

    本实例将探讨如何将这两者整合,通过AJAX技术实现一个仿Google Suggest的自动补全功能,该功能通常用于输入框中,为用户提供动态搜索建议。我们将详细解析这个实例中的各个组成部分。 首先,`index.jsp`是用户界面...

    仿GoogleSuggest自动补全的功能

    本教程将详细讲解如何实现一个仿GoogleSuggest的自动补全功能,旨在提供一个绝对实用的解决方案。 首先,理解GoogleSuggest的工作原理至关重要。它基于用户在搜索框中输入的字符,实时从服务器端获取并展示可能的...

    jquery练习的例子,仿真google suggest

    jquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,...

    jQuery学习记录----仿GoogleSuggest自动提示(八)

    在本篇博客“jQuery学习记录----仿GoogleSuggest自动提示(八)”中,作者分享了如何使用jQuery实现一个类似于Google搜索框中的自动提示功能。这个功能是许多网站上常见的用户体验提升工具,它允许用户在输入关键词...

    JQuery Ajax 仿google suggest 自动补全功能 支持中文(jsp / Servlet)

    本示例将深入解析如何使用jQuery Ajax实现一个仿Google Suggest的自动补全功能,特别针对中文输入进行了优化,并且结合了Java后端技术如jsp和Servlet。 首先,让我们理解这个功能的核心概念。Google Suggest的自动...

    仿google+suggest 自动完成程序

    【标题】"仿google suggest 自动完成程序"是一款基于AJAX、Access数据库和ASP.NET技术构建的应用,旨在模仿谷歌搜索引擎的自动建议功能。这个程序的主要目的是为那些正在学习AJAX技术的开发者提供一个实践和参考的...

    ajax仿google suggest 数据库版

    **Ajax仿Google Suggest数据库版**是基于Ajax技术实现的一种搜索建议功能,它模拟了Google搜索引擎在用户输入关键字时实时显示搜索建议的效果。这个项目主要使用Java作为后端语言,结合Ajax技术,为前端用户提供流畅...

    仿真google suggest的自定义js文件

    仿真google suggest的自定义js文件仿真google suggest的自定义js文件仿真google suggest的自定义js文件仿真google suggest的自定义js文件仿真google suggest的自定义js文件仿真google suggest的自定义js文件仿真...

    jquery suggest 自动补全插件演示

    jQuery Suggest插件就是这样一个工具,它为网页中的输入框提供了自动补全功能,使得用户在输入时能快速找到并选择所需的内容,大大提高了输入效率。本篇文章将深入探讨jQuery Suggest插件的使用方法、原理以及如何...

    仿Google Suggest提示效果

    【标题】"仿Google Suggest提示效果"是一个关于在网页中实现类似Google搜索框自动提示功能的技术分享。这种功能在现代网页应用中非常常见,它能够提升用户体验,帮助用户更快地找到他们想要输入的关键词。 【描述】...

    搜索提示仿google suggest提示效果

    AJAX实现类Google Suggest效果 *测试平台:Firefox2.0,IE6.0,IE7.0 *演示地址:http://www.okajax.com/demo/suggest/ *:文件结构: index.htm:首页,展现效果 ajax_result.asp:ajax调用后台返回结果文件 result.asp:...

    仿google suggest

    【标题】:“仿google suggest”通常指的是模仿谷歌自动补全功能的技术实现,它是一种智能搜索建议技术,旨在提高用户在搜索引擎中的输入效率和搜索体验。谷歌的自动补全功能可以根据用户在搜索框中输入的部分关键词...

    Ajax仿Google Suggest自动完成

    虽然是演示,但是并不是HelloWorld那种不实用的例子,而是包含两个经典的应用:用户名检测和Google Suggest自动完成。 两个例子都做得比较细,样式也用的比较多,所以一定是可以用于实际项目中的,希望对大家有帮助...

    Google Suggest,jquery autocomplete,自动完成示例

    总的来说,这个资源包提供了一个关于如何利用jQuery实现Google Suggest样式的自动完成功能的教程或实例。开发者可以通过学习和实践,提升自己在前端交互设计方面的能力,为网站或应用增加高效、友好的用户体验。同时...

    jquery-suggest:jQuery的建议

    jQuery-Suggest jQuery-Suggest 是一个基于 jQuery 的 suggest 组件,它主要为 PC 端的搜索框提供建议词条。 为什么要做这个组件 我曾经做过一个基于 Zepto 简洁实用的 suggest 组件:。 这个组件稍微改造即可在 ...

    jquery suggest插件

    jQuery Suggest 插件是一种强大的前端开发工具,它能够为用户在输入框中提供实时的建议和匹配,类似于百度和Google搜索的自动补全功能。这种功能对于提高用户体验、简化用户输入过程具有显著效果。在网页应用中,它...

    Flex实现仿Googlesuggest

    通过以上步骤,我们可以成功地使用Flex 3.0实现一个仿Google Suggest的自动完成功能。这个过程涵盖了Flex的组件开发、数据绑定、异步通信、事件处理等多个核心概念,对于提升Flex开发技能大有裨益。在实际项目中,还...

Global site tag (gtag.js) - Google Analytics