JSP/HTML页面弹出框

需求:项目中要求点击某个按钮,弹出一个对话框,输入数据,提交。
首先来分析一下,在A页面输入N多数据,然后点击提交按钮,弹出一个新的对话框B,对话框B里也要输入N多数据,在弹出的对话框B里点击提交,要把A页面和对话框B的数据提交到后台Controller里。
以前没做过此类需求,但是大概能猜到,点击按钮弹出div对话框即可。

度娘之后,了解到JQuery里有JQuery UI Dialog组件可以实现简单的弹出框,源代码如下:

<html>
	<head>
		<link rel="stylesheet" href="css/jquery-ui.css">  
            <script type="text/javascript" src="js/jquery.js"></script>  
            <script type="text/javascript" src="js/jquery-ui.js"></script>
		<script type="text/javascript">
			$(function() {  
                                $("#dialogId").hide();  
                        });
                        function showDialog() {
                                $("#dialogId").dialog({
                                        height: 300,
                                        width: 200,
                                        // 模态开启  
                                        modal: true,
                                        // 是否可拖拽  
                                        draggable: false,
                                        // 最小宽度  
                                        minWidth: 300,
                                        buttons: {  
                                                "提交": function() {
                        	                        $("#form").submit();
                                                },
                		                "取消": function() {
                			                $(this).dialog("close");
                		                }
                                        }
                                 });  
                        }
		</script>
	</head>
	<body>
		<form id="form" action="xxx.action" method="post">
			<table>
				<thead>
					<th>学号</th>
					<th>姓名</th>
					<th>性别</th>
					<th>年龄</th>
				</thead>
				<tbody>
					<tr>
						<td>1</td>
						<td>lily</td>
						<td>female</td>
						<td>18</td>
					</tr>
					<tr>
						<td>2</td>
						<td>lucy</td>
						<td>female</td>
						<td>18</td>
					</tr>
					<tr>
						<td>3</td>
						<td>tom</td>
						<td>male</td>
						<td>20</td>
					</tr>
				</tbody>
			</table>
			<div id="dialogId" title="保密信息"> 
	                        <div>
					<label>身份证号:</label>
					<input name="idCard" type="text"/>
				</div>
				<div>
					<label>手机号码:</label>
					<input name="phoneNum" type="text"/>
				</div> 
	                </div> 
			<div>
				<div class="control-group" style="margin-top:12px;margin-left:300px">
					<input name="auditStatus" class="btn btn-primary" type="button" οnclick='showDialog();' value="点我"/>
				</div>
			</div>
		</form>
	</body>
</html>

到此为止,已达到需求,下面就需要测试了。如下图所示:



弹出框的右上角关闭按钮没有很好的显示出来,这个是css样式的问题。由于本人css很渣,所以采用如下方法:

将css样式换成远程地址,也就是将代码<link rel="stylesheet" href="css/jquery-ui.css">

换成<link rel="stylesheet" href="//code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">即可,再次测试如下图:


下面我们可以测试在弹出框里填写数据了,那么问题来了,在弹出框里填写完数据之后想重新填数据,通过点击取消或者右上角的x按钮来关闭弹出框,在点击'点我'按钮时,弹出框仍带有上次填入的数据。也就是说关闭了弹出框之后,其实数据是没有清除了的。

分析下出现这种现象的问题:

使用JQuery的Dialog控件时,JQuery会将创建的dialog缓存到页面上,生成一些隐藏的div,当再次创建dialog时,由于id相同总会调用到缓存中的dialog,导致每次打开dialog时总是把上次的内容显示出来(当然,如果刷新了页面的话,是没有数据的),查了一些资料,有提到要用dialog的destroy方法的,第一次打开dialog时没问题,关闭之后在重新打开就会报错了,这种方法不可行。destroy销毁的JQuery UI生成dialog的时候那些同时生成的html不会销毁元素本身,要想销毁元素要用到remove。

给出代码:

<script type="text/javascript">
        $(function() { 
                $("#dialogId").hide();
        });
        function showDialog() {
                $("#dialogId").dialog({
                        height: 300, 
                        width: 200,
                        // 模态开启 
                        modal:true, 
                        // 是否可拖拽 
                        draggable: false, 
                        // 最小宽度 
                        minWidth: 300,
                        buttons: { 
                                "提交": function() { 
                                        $("#form").submit(); 
                                }, 
                                "取消": function() { 
                                        $(this).dialog("close"); 
                                } 
                         }, 
                         close: function() { 
                                $(this).remove(); 
                         } 
                 }); 
         }
</script>



 
 上面的方法可以把Dialog彻底清除,但又引发了另一个严重的问题,remove也把Dialog中的DIV清除了。 

为何会出现这种情况:页面中通常是自建一个DIV,通过IDV的id绑定Dialog,而JQuery会把这个自建的DIV清除,内容全部放到Dialog的DIV中,Dialog的DIV默认是在body中,这对于使用ajax重写页面代码的应用产生了很多的冲突,如果使用上面的方法,Dialog只能弹出一次,关闭的时候就会被remove。

解决方案:在调用JQuery Dialog组件之前把自建的div先clone一份,关闭dialog之后把clone的div重新append到页面上。

给出代码:

<script type="text/javascript">
        $(function() {
	        $("#dialogId").hide();
	}); 
	function showDialog() {
                var divID = $("#dialogId");
                var dialogParent = $("#dialogId").parent();
                var dialogOwn = divID.clone();
                dialogOwn.hide();
                $("#dialogId").dialog({
                        height: 300,
                        width: 200,
                        // 模态开启
                        modal:true,
                        // 是否可拖拽
                        draggable: false,
                        // 最小宽度
                        minWidth:300,
                        buttons: {
                                "提交": function() {
                                        $("#form").submit();
                                },
                                "取消": function() {
                                        $(this).dialog("close");
                                }
                        },
                        close: function() {
                                dialogOwn.appendTo(dialogParent);  
                                $(this).dialog("destroy").remove();
                        }
                  });
          }
</script>


源码如下:

源码位置

其中,goodDialog.jsp页面能显示出弹出框,但是关闭按钮显示不出;

betterDialog.jsp页面在goodDialog.jsp的基础上能正常显示出关闭按钮,但是关闭按钮后,再次点击时弹出框会带出上次填写的数据;

bestDialog.jsp页面修复betterDialog.jsp的bug。此页面再无其它bug,为最终版。

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
推荐一个国人编写的、超牛的、基于jQuery插件式、监听模式(无侵入)的html页面form表单通用验证架: [b]formValidator[/b] 它能监听到所有控件类型、所有数据格式,还有ajax异步验证功能(例如用户注册时去数据库查询以检查有没有重复)。消息提示有多种模式,例如在控件旁边显示消息、弹出式消息。下面提供一样注册页面验证示例: Html的form表单: [code=HTML] * 用 户 名: * 密  码: * 确认密码: * 电子邮件: * 验 证 码: [/code] 上面每控件后面都一个标签是用来显示消息的。 Html的JavaScript: [code=HTML] $(document).ready(function(){ //告诉formValidator架要验证userReg这个表单,如果提交时还有错误,则弹出对话通知 $.formValidator.initConfig({formid:"userReg",onerror:function(msg){alert(msg)}}); //验证用户名这个字段,同时还要求到服务器验证是否有重复值 $("#username").formValidator({onshow:" ",onfocus:"用户名至少4个字符,最多10个字符",oncorrect:"该用户名可以注册"}).inputValidator({min:4,max:48,onerror:"你输入的用户名非法,请确认"}).regexValidator({regexp:"username",datatype:"enum",onerror:"用户名格式不正确"}).ajaxValidator({ type : "get", url : "/userValidator.do", success : function(data){if( data == "1" ){return true;}else{return false;}}, buttons: $("#button"), error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");}, onerror : "该用户名不可用,请更换用户名", onwait : "正在检查此用户名是否被人注册,请稍候..." }); //验证密码 $("#password").formValidator({onshow:" ",onfocus:"密码不能为空",oncorrect:"密码合法"}).inputValidator({min:1,empty:{leftempty:false,rightempty:false,emptyerror:"密码两边不能有空符号"},onerror:"密码不能为空,请确认"}); //验证确认密码,同时要求与第一交密码一致 $("#repassword").formValidator({onshow:" ",onfocus:"两次密码必须一致哦",oncorrect:"密码一致"}).inputValidator({min:1,empty:{leftempty:false,rightempty:false,emptyerror:"重复密码两边不能有空符号"},onerror:"重复密码不能为空,请确认"}).compareValidator({desid:"passWord",operateor:"=",onerror:"2次密码不一致,请确认"}); //验证电子邮件,同时要求数据库中必须唯一 $("#email").formValidator({onshow:" ",onfocus:"邮箱6-100个字符,输入正确了才能离开焦点",oncorrect:"该电子信箱可以注册"}).inputValidator({min:6,onerror:"你输入的电子邮箱不合格,请确认"}).regexValidator({regexp:"^([\\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",onerror:"你输入的邮箱格式不正确"}).ajaxValidator({ type : "get", url : "/emailValidator.do", success : function(data){ if( data == "1" ){return true;}else{return false;}}, buttons: $("#button"), error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");}, onerror : "该电子信箱已被注册,请更换一个", onwait : "正在对电子信箱唯一性进行合校验,请稍候..." }); //对验证码是否输入进行验证 $("#valicode").formValidator({onshow:" ",onfocus:"输入旁边图片上的数字"}).inputValidator({min:3,onerror: "请输入验证码!"}); }); [/code] 这是一个典型的注册表单,form中没有侵入作何元素。而formValidator则通过jQuery的监听模式实现对form表单的验证。并对username、email字段实现无刷新服务器验证。 压缩包中含有demo,demo就是文档,很容易使用
JSP基于SSM教材预订管理系统毕业源码案例 1 教材信息管理:增(增加书籍,除了数量默认为0其他的信息都能增加尚)、删、改、查 注意:每一本教材页面显示字段有数量(库存需要用到)以及对应的教材分类。 有一个批量增加的功能(选择对应的书籍只增加数量,增加后的数量显示的数量为原来与增加的之和) 图标统计入库需要统计 2 教材分类管理:增、删、改、查 如:软件类别、哲学类别 3 领用管理:学生以及教师可查询到所有的书籍(选择对应的分类下级列表的书籍,点击领用,弹出领用的信息狂:包含书籍名称、领取人、领取角色、领取数量、领取描述) 4 查看状态:显示对应用户申请领用的书籍列表,列表有状态信息、查看详细情况、 5 管理员审核:列表显示书籍领用的信息(每一行列表包含领书用户名、系部信息、领书书籍名、领书数量、领书描述)、查看详细领书信息、状态审核(同意或者不同意、审核理由,审核过的数据不可再审核) 开发环境:Eclipse/Idea + mysql5.6数据库 后台架: SSM(SpringMVC + Spring + Mybatis) 前台架: Bootstrap(一个HTML5响应式架) -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
JSP中点击按钮弹出模态,可以使用Bootstrap架中的Modal组件来实现。 首先,在JSP页面中引入Bootstrap的CSS和JS文件: ```html <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/js/bootstrap.min.js"></script> ``` 然后,在页面中添加一个按钮: ```html <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">打开模态</button> ``` 其中,`data-toggle="modal"`表示点击按钮时弹出模态,`data-target="#exampleModal"`表示模态的ID为exampleModal。 最后,在页面中添加模态HTML代码: ```html <div class="modal" tabindex="-1" role="dialog" id="exampleModal"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">模态标题</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <p>模态内容</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> <button type="button" class="btn btn-primary">保存</button> </div> </div> </div> </div> ``` 在上述代码中,`id="exampleModal"`与按钮中的`data-target="#exampleModal"`对应,`class="modal"`表示这是一个模态,`role="dialog"`表示角色为对话。 点击按钮后,模态就会弹出,点击关闭按钮或者点击模态外部区域都可以关闭模态

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值