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自动补全功能”中,作者分享了如何使用jQuery实现一个类似Google Suggest的自动补全功能,这是一种常见的前端交互设计,广泛应用于搜索框输入时提供...
本实例将探讨如何将这两者整合,通过AJAX技术实现一个仿Google Suggest的自动补全功能,该功能通常用于输入框中,为用户提供动态搜索建议。我们将详细解析这个实例中的各个组成部分。 首先,`index.jsp`是用户界面...
本教程将详细讲解如何实现一个仿GoogleSuggest的自动补全功能,旨在提供一个绝对实用的解决方案。 首先,理解GoogleSuggest的工作原理至关重要。它基于用户在搜索框中输入的字符,实时从服务器端获取并展示可能的...
jquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,仿真google suggestjquery练习的例子,...
在本篇博客“jQuery学习记录----仿GoogleSuggest自动提示(八)”中,作者分享了如何使用jQuery实现一个类似于Google搜索框中的自动提示功能。这个功能是许多网站上常见的用户体验提升工具,它允许用户在输入关键词...
本示例将深入解析如何使用jQuery Ajax实现一个仿Google Suggest的自动补全功能,特别针对中文输入进行了优化,并且结合了Java后端技术如jsp和Servlet。 首先,让我们理解这个功能的核心概念。Google Suggest的自动...
【标题】"仿google suggest 自动完成程序"是一款基于AJAX、Access数据库和ASP.NET技术构建的应用,旨在模仿谷歌搜索引擎的自动建议功能。这个程序的主要目的是为那些正在学习AJAX技术的开发者提供一个实践和参考的...
**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提示效果"是一个关于在网页中实现类似Google搜索框自动提示功能的技术分享。这种功能在现代网页应用中非常常见,它能够提升用户体验,帮助用户更快地找到他们想要输入的关键词。 【描述】...
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”通常指的是模仿谷歌自动补全功能的技术实现,它是一种智能搜索建议技术,旨在提高用户在搜索引擎中的输入效率和搜索体验。谷歌的自动补全功能可以根据用户在搜索框中输入的部分关键词...
虽然是演示,但是并不是HelloWorld那种不实用的例子,而是包含两个经典的应用:用户名检测和Google Suggest自动完成。 两个例子都做得比较细,样式也用的比较多,所以一定是可以用于实际项目中的,希望对大家有帮助...
总的来说,这个资源包提供了一个关于如何利用jQuery实现Google Suggest样式的自动完成功能的教程或实例。开发者可以通过学习和实践,提升自己在前端交互设计方面的能力,为网站或应用增加高效、友好的用户体验。同时...
jQuery Suggest插件就是这样一个工具,它为网页中的输入框提供了自动补全功能,使得用户在输入时能快速找到并选择所需的内容,大大提高了输入效率。本篇文章将深入探讨jQuery Suggest插件的使用方法、原理以及如何...
jQuery-Suggest jQuery-Suggest 是一个基于 jQuery 的 suggest 组件,它主要为 PC 端的搜索框提供建议词条。 为什么要做这个组件 我曾经做过一个基于 Zepto 简洁实用的 suggest 组件:。 这个组件稍微改造即可在 ...
jQuery Suggest 插件是一种强大的前端开发工具,它能够为用户在输入框中提供实时的建议和匹配,类似于百度和Google搜索的自动补全功能。这种功能对于提高用户体验、简化用户输入过程具有显著效果。在网页应用中,它...
通过以上步骤,我们可以成功地使用Flex 3.0实现一个仿Google Suggest的自动完成功能。这个过程涵盖了Flex的组件开发、数据绑定、异步通信、事件处理等多个核心概念,对于提升Flex开发技能大有裨益。在实际项目中,还...