基于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插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
jquery仿微信聊天界面
May 06 jQuery
jQuery+Ajax实现用户名重名实时检测
Jun 01 jQuery
jQuery+ajax实现修改密码验证功能实例详解
Jul 06 jQuery
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
Oct 20 jQuery
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
layui中使用jquery控制radio选中事件的示例代码
Aug 15 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 jQuery
jQuery实现轮播图效果demo
Jan 11 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
js 字符串操作函数
2009/07/25 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
jupyter安装小结
2016/03/13 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
白酒业务员岗位职责
2013/12/27 职场文书
优秀教师获奖感言
2014/01/31 职场文书
慈善晚会策划方案
2014/05/14 职场文书
挂靠协议书
2015/01/27 职场文书
三峡大坝导游词
2015/01/31 职场文书
党员自我评价2015
2015/03/03 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
2016年十一促销广告语
2016/01/28 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书