基于JQuery和DWR实现异步数据传递


Posted in jQuery onOctober 16, 2020

后台我用DWR进行异步数据传递:

代码很简单,就是返回一个数组,如果需求不同可以自己修改:

package org.dwr.re;
/**
 * 测试 返回数组
 * @author 崔素强
 */
public class BackArray {
	public String[] backArr() {
		String[] arr = new String[] { "坚持", "就是", "胜利" };
		return arr;
	}
}

前台记得导入DWR的JS,和JQuery的JS,然后写文本框的输入事件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>" rel="external nofollow" >  
  <title>自动补全</title>
  <script type='text/javascript' src='/buquan/dwr/util.js'></script>
  <script type='text/javascript' src='/buquan/dwr/engine.js'></script>
  <script type='text/javascript' src='/buquan/dwr/interface/arr.js'></script>
	<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
	<script type="text/javascript">		
	var highlightindex = -1; //高亮节点
	var timeOutId;
	$(document).ready(function() {	
	var wordInput = $("#keyText"); //文本框值	
  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() + 5);  
	//文本框事件
	$("#keyText").keyup(function(){
    var myEvent = event || window.event;
    var keyCode = myEvent.keyCode; //取得按键的值
		var autoNode = $("#auto");
		//输入字母等的情况,包括回车,delete
		if (keyCode >= 65 && keyCode <= 90 || keyCode == 8 || keyCode == 46) {
			autoNode.html("");			
			var wordText=$("#keyText").val(); //当前文本框值
			if (wordText != ""){
				//将上一次没有完成的请求清除
				clearTimeout(timeOutId);
				//将请求延迟
				timeOutId = setTimeout(function(){
					//使用DWR返回数据,暂时没有设置参数,返回一个字符串数组即可
					arr.backArr(function back(data){
			  		for(i = 0;i < data.length;i++){	
			  			var newDiv = $("<div>").attr("id",i); // 增加标识		  			  			
			  			newDiv.html(data[i]).appendTo(autoNode); //创建新的节点到原DIV元素
			  			//鼠标移入事件
			  			newDiv.mouseover(function(){
			  				if(highlightindex != -1){
			  					$("#auto").children("div").eq(highlightindex)
			  					.css("background-color","white");
			  				}
			  				//增加一个属性
			  				highlightindex = $(this).attr("id");
			  				//当前设为红色
			  				$(this).css("background-color","red");
			  			});
			  			//鼠标移出事件
			  			newDiv.mouseout(function(){
			  				//当前清除颜色
			  				$(this).css("background-color","white");
			  			});
			  			//鼠标单击事件
			  			newDiv.click(function(){
			  				//取出高亮节点的文本内容
				        var comText = $("#auto").hide().children("div").eq(highlightindex).text();
				        highlightindex = -1;
				        //文本框中的内容变成高亮节点的内容
				        $("#keyText").val(comText);
			  			});
			  		}
			  		if (data.length > 0){		  			
			  			autoNode.show();
			  		}else{
			  			autoNode.hide();
			  		}
			  	});
		  	},500); //延迟处理
	  	} else {	  		
		  	autoNode.hide();
	  	}
	  	highlightindex = -1;
  	} else if (keyCode == 38 || keyCode == 40) {
  		if (keyCode == 38) { //向上        
        var autoNodes = $("#auto").children("div")
        if (highlightindex != -1) {
          //如果原来存在高亮节点,则将背景色改称白色
          autoNodes.eq(highlightindex).css("background-color","white");
          highlightindex--;
        } else {
          highlightindex = autoNodes.length - 1;  
        }
        if (highlightindex == -1) {
          //如果修改索引值以后index变成-1,则将索引值指向最后一个元素
          highlightindex = autoNodes.length - 1;
        }
        //让现在高亮的内容变成红色
        autoNodes.eq(highlightindex).css("background-color","red");
      }
  		if (keyCode == 40) { //向下        
        var autoNodes = $("#auto").children("div")
        if (highlightindex != -1) {
          //如果原来存在高亮节点,则将背景色改称白色
          autoNodes.eq(highlightindex).css("background-color","white");
        }
        highlightindex++;
        if (highlightindex == autoNodes.length) {
          //如果修改索引值以后index变成-1,则将索引值指向最后一个元素
          highlightindex = 0;
        }
        //让现在高亮的内容变成红色
        autoNodes.eq(highlightindex).css("background-color","red");
      }
  	} else if (keyCode == 13) {
  		 //下拉框有高亮内容
      if (highlightindex != -1) {
        //取出高亮节点的文本内容
        var comText = $("#auto").hide().children("div").eq(highlightindex).text();
        highlightindex = -1;
        //文本框中的内容变成高亮节点的内容
        $("#keyText").val(comText);
      } else {
        //下拉框没有高亮内容
        alert("文本框中的[" + $("#keyText").val() + "]被提交了");
      }
  	}
	});
	});
	</script>	
 </head> 
 <body>
  <input type="text" id="keyText" name="keyText" width="50px" />
  <div id="auto" align="left"></div>
 </body>
</html>

当你输入时,会去后台查询并显示一些数据,你可以使用上下键来操作,回车时自动提交数据!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
jQuery判断邮箱格式对错实例代码讲解
Apr 12 jQuery
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
jQuery获取随机颜色的实例代码
May 21 jQuery
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 jQuery
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
jQuery 选择器用法基础入门示例
Jan 04 jQuery
jquery简易手风琴插件的封装
Oct 13 #jQuery
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
Oct 09 #jQuery
jQuery实现二级导航菜单的示例
Sep 30 #jQuery
JQuery Ajax如何实现注册检测用户名
Sep 25 #jQuery
jQuery实现带进度条的轮播图
Sep 13 #jQuery
jQuery实现鼠标拖拽登录框移动效果
Sep 13 #jQuery
jQuery实现简单全选框
Sep 13 #jQuery
You might like
mysql时区问题
2008/03/26 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
用Python给文本创立向量空间模型的教程
2015/04/23 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
python绘制地震散点图
2019/06/18 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
NET程序员上机面试题
2015/05/23 面试题
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
小学三年级作文之写景
2019/11/05 职场文书
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS