上段时间想做一个百度等搜索自动提示补全的功能。于是从网上弄了点资料实现了第一个版本,但光标事件没有实现。于是又从网上弄了点资料,这个版本的作者我记不清楚了,对他说声对不起,由于这个版本的数据是在页面上写的死数据,所以个人把这个地方改成用DWR从后台取的数据,数据封装形式为List<javaBean>。修改后完成鼠标,方向键,ESC键以及失去焦点后所有的功能。程序中你也可以把AutoComplete类修改成两个参数的类,我这里还是沿用三个参数,初始化时只是随便给了一条数据,真正的数据是从后台刷出来的。当然也可以把取数据的改成AJAX等其他方式。效果图如下:
以下是代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<script type='text/javascript' src="<c:url value='/dwr/interface/SearchAuto.js'/>"></script>
<script type='text/javascript' src="<c:url value='/dwr/engine.js'/>"></script>
<script type='text/javascript' src="<c:url value='/dwr/util.js'/>"></script>
<style>
.auto_hidden {
width:204px;border-top: 1px solid #333;
border-bottom: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
position:absolute;
display:none;
}
.auto_show {
width:204px;
border-top: 1px solid #333;
border-bottom: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
position:absolute;
z-index:9999; /* 设置对象的层叠顺序 */
display:block;
}
.auto_onmouseover{
color:#ffffff;
background-color:highlight;
width:100%;
}
.auto_onmouseout{
color:#000000;
width:100%;
background-color:#ffffff;
}
</style>
<script type="text/javascript">
//验证
function validate(){
var key = document.getElementById("key").value;
if(key ==""){
alert("请输入检索内容!");
return false;
}
return true;
}
</script>
<script language="javascript">
<!--
/*
通用: 自动补全(仿百度搜索框)
*/
var get$ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
}
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}
function AutoComplete(obj,autoObj,arr){
this.obj=get$(obj); //输入框
this.autoObj=get$(autoObj);//DIV的根节点
this.value_arr=arr; //不要包含重复值
this.index=-1; //当前选中的DIV的索引
this.search_value=""; //保存当前搜索的字符
}
AutoComplete.prototype={
//初始化DIV的位置
init: function(){
this.autoObj.style.left = this.obj.offsetLeft+"px" ;
this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight + "px";
this.autoObj.style.width= this.obj.offsetWidth - 2 + "px";//减去边框的长度2px
},
//删除自动完成需要的所有DIV
deleteDIV: function(){
while(this.autoObj.hasChildNodes()){
this.autoObj.removeChild(this.autoObj.firstChild);
}
this.autoObj.className="auto_hidden";
},
//设置值
setValue: function(_this){
return function(){
_this.obj.value=this.seq;
_this.autoObj.className="auto_hidden";
}
},
//模拟鼠标移动至DIV时,DIV高亮
autoOnmouseover: function(_this,_div_index){
return function(){
_this.index=_div_index;
var length = _this.autoObj.children.length;
for(var j=0;j<length;j++){
if(j!=_this.index ){
_this.autoObj.childNodes[j].className='auto_onmouseout';
}else{
_this.autoObj.childNodes[j].className='auto_onmouseover';
}
}
}
},
//更改classname
changeClassname: function(length){
for(var i=0;i<length;i++){
if(i!=this.index ){
this.autoObj.childNodes[i].className='auto_onmouseout';
}else{
this.autoObj.childNodes[i].className='auto_onmouseover';
this.obj.value=this.autoObj.childNodes[i].seq;
}
}
}
,
//响应键盘
pressKey: function(event){
var length = this.autoObj.children.length;
//ESC键
if(event.keyCode == 27){
document.getElementById("auto").className="auto_hidden";
}
//光标键"↓"
if(event.keyCode==40){
++this.index;
if(this.index>length){
this.index=0;
}else if(this.index==length){
this.obj.value=this.search_value;
}
this.changeClassname(length);
}
//光标键"↑"
else if(event.keyCode==38){
this.index--;
if(this.index<-1){
this.index=length - 1;
}else if(this.index==-1){
this.obj.value=this.search_value;
}
this.changeClassname(length);
}
//回车键
else if(event.keyCode==13){
this.autoObj.className="auto_hidden";
this.index=-1;
}else{
this.index=-1;
}
},
//程序入口
start: function(event){
//取数据
var data = new Array() ;
var key = document.getElementById('key').value;
if(key != null && key.trim() !=""){
DWREngine.setAsync(false);
SearchAuto.getResourcesInfoByDwr(key,{
callback:function callback(msg){
//调用单独的回调函数
for(var i = 0 ;i<msg.length;i++){
data.push(msg[i].erinName);
}
},
errorHandler:function errors(){
//do nothing
}
});
DWREngine.setAsync(true);
}
this.value_arr=data; //数据变化时重新赋值
//键盘
if(event.keyCode!=13&&event.keyCode!=38&&event.keyCode!=40){
this.init();
this.deleteDIV();
this.search_value=this.obj.value;
var valueArr=this.value_arr;
valueArr.sort();
if(this.obj.value.replace(/(^\s*)|(\s*$)/g,'')==""){ return; }//值为空,退出
try{ var reg = new RegExp("(" + this.obj.value + ")","i");}
catch (e){ return; }
var div_index=0;//记录创建的DIV的索引
for(var i=0;i<valueArr.length;i++){
if(reg.test(valueArr[i])){
var div = document.createElement("div");
div.className="auto_onmouseout";
div.seq=valueArr[i];
div.onclick=this.setValue(this);
div.onmouseover=this.autoOnmouseover(this,div_index);
div.innerHTML=valueArr[i].replace(reg,"<strong>$1</strong>");//搜索到的字符粗体显示
this.autoObj.appendChild(div);
this.autoObj.className="auto_show";
div_index++;
}
}
}
this.pressKey(event);
window.onresize=Bind(this,function(){this.init();});
}
}
//失去焦点时关闭提示框
document.onclick = function(e)
{
var event = window.event || e;
var ele = event.srcElement || event.target;
if(ele.id != "autoComplete" && ele.id !="key"){
document.getElementById("auto").className="auto_hidden";
}
}
//-->
</SCRIPT>
<form id="form1" name="form1" method="post" action="search/hibernateSearch.htm?action=searchAllResources" onsubmit="return validate();">
<div class="searchtop">
<input type="radio" name="type" value="0" />全部
<input type="radio" name="type" value="1" />作者
<input type="radio" name="type" value="2" checked="checked"/>书名
</div>
<div class="searchmain bugc">
<input type="text" name="key" id="key" value="${key }" class="inputa" onkeyup="autoComplete.start(event);" autocomplete="off"/>
<input type="submit" name="Submit" value="" class="btna"/>
<div id="auto" class="auto_hidden" ></div>
<a href="search/hibernateSearch.htm?action=advancedSearchForward" title="高级检索">高级检索</a></div>
<script>
var autoComplete = new AutoComplete('key','auto',['1','11']);
</SCRIPT>
</form>
- 大小: 15.3 KB
- 大小: 15.3 KB
分享到:
相关推荐
在本文中,我们将深入探讨如何使用Ajax、Direct Web Remoting (DWR) 框架以及Hibernate ORM工具来实现一个自动补全功能。这个功能类似于百度搜索引擎中的输入提示,能够根据用户输入的字符动态地提供可能的搜索建议...
在本教程中,我们将深入探讨如何利用DWR框架来实现自动补全功能,结合Servlet和JDBC,为用户提供流畅的数据检索体验。 自动补全功能在现代Web应用中非常常见,例如搜索引擎、输入框建议等。它能够根据用户在输入框...
DWR自动补全 1111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
jQuery 自动补全功能是一种常见的用户体验提升技术,它在用户输入时提供预填充选项,通常应用于搜索框或表单字段。这种功能可以通过监听用户输入并发送 AJAX 请求到服务器来获取匹配数据,然后将结果展示给用户。在...
根据提供的文件信息,我们可以深入探讨如何使用SSH(Struts2 + Spring + Hibernate)框架结合DWR(Direct Web Remoting)实现自动补全功能。自动补全是现代Web应用中常见的交互特性之一,它不仅可以提高用户体验,还...
在IT领域,特别是Web开发中,Ajax(Asynchronous JavaScript and XML)技术和DWR(Direct Web Remoting)框架的结合被广泛应用于实现动态网页效果,尤其是内容自动补全功能,这在用户界面交互设计中极为常见。...
【基于JQuery和DWR的自动补全】是一种在Web应用中实现动态数据输入提示的技术。JQuery是一款广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。DWR(Direct Web Remoting)则是一个Java...
在这个项目中,我们将聚焦于如何利用Direct Web Remoting (DWR) 框架来实现Ajax的自动补全功能。 DWR是一种轻量级的Java库,它允许JavaScript和Java之间进行安全的、动态的远程方法调用(RMI)。DWR简化了Ajax应用的...
自己dwr做的实例,具体如下: 数据库中有五条记录:1 12 123 1234 12345 输入 1 输出:1 12 123 1234 12345(以1开头的全部记录) 输入 12 输出: 12 123 1234 12345(以12..) 输入 123输出: 123 1234 12345(以123..) ...
DWR的自动补全功能是通过其内置的JavaScript引擎实现的,它会根据服务器端暴露的Java对象和方法自动生成对应的JavaScript代码,这样在使用这些对象和方法时,开发工具(如IDE)可以提供实时的补全建议。此外,DWR还...
在这个实例中,“DWR实现Google自动提示功能”是利用DWR框架来构建一个类似于Google搜索框的自动提示功能,用户在输入框中输入时,后台会实时地根据输入内容提供相关的建议,无需页面刷新。 一、DWR框架详解: DWR...
在本实例"**dwr补全查询**"中,我们关注的是如何利用DWR实现类似百度搜索那样的自动补全功能。这种功能通常用于提高用户输入效率,当用户在输入框中键入字符时,系统会根据已输入的字符实时查询数据库,并通过Ajax...
标题中的“类似google搜索内容补全”指的是在网页搜索框中输入关键词时,系统能够根据已输入的部分文字预测并提供可能的完整搜索词,这种功能通常被称为自动补全或自动建议。Google搜索的自动补全功能是通过分析大量...
在这个特定的项目中,"dwr ajax 下拉框自动搜索"是指利用DWR框架和AJAX技术来创建一个功能,用户在输入框中输入关键词时,下拉框会自动填充匹配的建议,类似百度搜索的体验。当用户选择某个选项或点击搜索按钮,系统...
【标题】"DWR实现Web类似Web桌面功能"揭示了一个技术应用场景,即使用Direct Web Remoting (DWR)框架在Web应用中实现类似桌面应用的交互体验。DWR是一种JavaScript库,它允许JavaScript代码直接调用服务器端的Java...
通过DWR,我们可以使用JavaScript直接调用服务器端的Java方法,实现Ajax(Asynchronous JavaScript and XML)的功能,即在后台与服务器交互数据并局部更新网页。 **Ajax**的核心是利用JavaScript进行异步数据请求,...
根据提供的文件信息,我们可以分析出该段代码涉及的是一个基于Ajax技术实现的用户输入自动补全功能。下面将从以下几个方面进行深入解析: ### 一、理解Ajax自动补全的基本概念 Ajax(Asynchronous JavaScript and ...
DWR(Direct Web Remoting)是一个开源的Java库,它允许JavaScript在客户端与服务器端的Java对象进行直接交互,从而实现在Web应用中的Ajax(Asynchronous JavaScript and XML)功能。在本示例中,我们将深入探讨如何...
本篇文章将详细讲解如何利用DWR 3实现推送功能。 1. **DWR 3 的基本概念** DWR 3 提供了一种安全、高效的机制,使得JavaScript可以调用Java方法,并将结果返回到页面上。这种机制是基于HTTP的异步请求,因此无需...
4. **AutoComplete**:DWR提供了自动完成功能,用于在客户端输入框中动态提示可能的匹配项,例如在搜索框中输入内容时显示建议列表。 5. **Echo**:DWR的Echo功能允许在后台执行长时间的任务,同时保持与客户端的...