首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

仿Google自动补全示范

2012-09-14 
仿Google自动补全示例1.?在MyEclipse中实现示例??在MyEclipse中新建一个webProject,命名为AjaxDemo??导入j

仿Google自动补全示例

1.?在MyEclipse中实现示例

??在MyEclipse中新建一个webProject,命名为AjaxDemo

??导入jquery框架,首先从网站上下载jquery,解压文件得到jquery的核心代码(jquery-1.4.2.min.js),在webRoot目录下新建一个jscode文件夹,将jquery-1.4.2.min.js代码copy到jscode文件夹下。

??首先新建一个html页面,命名为JQueryAutoComplete.html,代码如下:

<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">

<html>

<head>

<title>自动补全示例演示</title>

<script?type="text/javascript"?src="jscode/jquery-1.4.2.min.js"></script>

<script?type="text/javascript"?src="jscode/jqueryauto.js"></script>

</head>

<body>

<center>

<h2>

仿Google自动补全示例

</h2>

<input?type="text"?id="word"?/>

<input?type="button"?value="搜索"?/>

<br?/>

</center>

<div?id="auto"></div>

</body>

</html>

<!--EndFragment-->

?

以上代码需要注意:首先要在html页面中引用jquery的代码:

?

<script?type="text/javascript"?src="jscode/jquery-1.4.2.min.js"></script>

<!--EndFragment-->

?

其次对于引入js代码的顺序要注意,先引入jquery代码,再引入自动补全的js实现代码

?

<script?type="text/javascript"?src="jscode/jqueryauto.js"></script>

?

?

?

?

并在web.xml文件配置:

<servlet>

????<servlet-name>AutoComplete</servlet-name>

????<servlet-class>com.tlj.test.AutoComplete</servlet-class>

??</servlet>

<servlet-mapping>

????<servlet-name>AutoComplete</servlet-name>

<url-pattern>/AutoComplete</url-pattern>

?</servlet-mapping>

?

<!--EndFragment--><!--EndFragment-->

??在webRoot目录下新建一个jsp页面,命名为wordxml.jsp,其代码如下所示:

<%@?page?contentType="text/xml;charset=utf-8"?language="java"?%>

<%

String?word=(String)request.getAttribute("word");

%>

<words>

<%if("absolute".startsWith(word)){%>

<word>absolute</word>

<%}%>

<%if("anyone".startsWith(word)){%>

<word>anyone</word>

<%}%>

<%if("anything".startsWith(word)){%>

<word>anything</word>

<%}%>

<%if("apple".startsWith(word)){%>

<word>apple</word>

<%}%>

<%if("abandon".startsWith(word)){%>

<word>abandon</word>

<%}%>

<%if("breach".startsWith(word)){%>

<word>breach</word>

<%}%>

<%if("break".startsWith(word)){%>

<word>break</word>

<%}%>

<%if("boolean".startsWith(word)){%>

<word>boolean</word>

<%}%>

</words>

?

在这段代码中要注意处:第一句中contentType="text/xml;charset=utf-8",其类型是xml类型。

??自动补全的核心代码是其的js代码,在jscode文件夹下建立jqueryauto.js,代码如下所示:

var?hightlightindex?=?-1;//高亮表示

var?timeoutId;//延迟加载

$(document).ready(function?()?{

//自动补全框开始应该隐藏起来

var?wordInput?=?$("#word");

var?wordInputOffset?=?wordInput.offset();

$("#auto").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());

//给文本框添加键盘按下的事件

wordInput.keyup(function?(event)?{

//处理文本框中的键盘事件

var?myEvent?=?event?||?window.event;

var?keyCode?=?myEvent.keyCode;

//如果输入的是字母,应该将文本框中的最新的信息发送给服务器

if?(keyCode?>=?65?&&?keyCode?<=?90?||?keyCode?==?8?||?keyCode?==?46)?{

//1.获取文本框中的内容

var?wordText?=?$("#word").val();

if?(wordText?!=?"")?{

clearTimeout(timeoutId);

????timeoutId?=?setTimeout(function?()?{

$.post("AutoComplete",?{word:wordText},?function?(data)?{

var?jqueryObj?=?$(data);

????//找到所有的word节点

var?wordNodes?=?jqueryObj.find("word");

var?autoNode?=?$("#auto");

????//需要清空原来的内容

autoNode.html("");

wordNodes.each(function?(i)?{

//获取单词内容

var?wordNode?=?$(this);

//新建div节点,将单词内容加入到新建的节点中

//将新建的节点加入到弹出框的节点中

var?newDivNode?=?$("<div>").attr("id",?i);

newDivNode.html(wordNode.text()).appendTo(autoNode);

newDivNode.mouseover(function?()?{

if?(hightlightindex?!=?-1)?{

??????????????????????????$("#auto").children("div").eq(hightlightindex)

.css("background-color",?"white");

? }

hightlightindex?=?$(this).attr("id");

$(this).css("background-color",?"red");

});

newDivNode.mouseout(function?()?{

$("this")..css("background-color",?"white");

});

newDivNode.click(function?()?{

var?comText?=?$(this).text();

$("#auto").hide();

hightlightindex?=?-1;

$("#word").val(comText);

});

});

???????//如果服务器端有数据,则显示弹出框

if?(wordNodes.length?>?0)?{

autoNode.show();

}?else?{

autoNode.hide();

hightlightindex?=?-1;

}

},?"xml");

},?500);

//2.将文本框中的内容发送给服务器

}?else?{

autoNode.hide();

hightlightindex?=?-1;

}

}?else?{

if?(keyCode?==?38?||?keyCode?==?40)?{

//输入是上下键

if?(keyCode?==?38)?{

//向上键

var?autoNodes?=?$("#auto").children("div");

if?(hightlightindex?!=?-1)?{

autoNodes.eq(hightlightindex).

css("background-color",?"white");

hightlightindex--;

}?else?{

hightlightindex?=?autoNodes.length?-?1;

}

if?(hightlightindex?==?-1)?{

hightlightindex?=?autoNodes.length?-?1;

}

autoNodes.eq(hightlightindex).css("background-color",?"red");

}

if?(keyCode?==?40)?{

??//向下键

var?autoNodes?=?$("#auto").children("div");

if?(hightlightindex?!=?-1)?{

autoNodes.eq(hightlightindex)

.css("background-color",?"white");

}

hightlightindex++;

if?(hightlightindex?==?autoNodes.length)?{

hightlightindex?=?0;

}

autoNodes.eq(hightlightindex).css("background-color",?"red");

}

}?else?{

if?(keyCode?==?13)?{

//输入的是回车

if?(hightlightindex?!=?-1)?{

var?comText?=?$("#auto").hide().children("div")

.eq(hightlightindex).text();

hightlightindex?=?-1;

$("#word").val(comText);

}?else?{

$("#auto").hide();

$("#word").get(0).blur();

}

}

}

}

});

});

<!--EndFragment--><!--EndFragment-->

热点排行