使用Layer弹出iframe表单窗口,有几率无法成功提交表单问题解决

1.需求分析:使用Layer将表单放到iframe中弹出,点击弹窗中表单页面的使用button标签写的提交按钮(非input指定type为submit的那个提交按钮)提交表单,然后关闭窗口,父页面显示操作成功消息。

2. 表单

<form id="dbForm" action="${pageContext.request.contextPath }/create_database" method="post">
	Database Name:<input type="text" name="dbName"/><br/><br/>
	Owner:<input type="text" name="owner"/><br/><br/>
	Database charset:<input type="text" name="dbCharset"/><br/><br/>
	TimeZone:<input type="text" name="timeZone"/><br/><br/>
</form>
<button id="createDatabase">创建</button>    
<button id="cancel">取消</button>
3. 有问题的实现方式:

var index = parent.layer.getFrameIndex(window.name);
$("#createDatabase").click(function(){
	$("#dbForm").submit();
			
	parent.layer.msg("数据库创建成功了");
	parent.layer.close(index);
});
上述实现方式,有几率会导致表单不能提交,Chrome调试工具中都监测不到请求的发送。网上查了一些资料,

原因是:js里边代码的执行顺序并不一定是按照代码的顺序执行的1不能直接在按钮的点击事件里执行submit()之后

执行关闭操作。(参照博客:点击打开链接

4. 可以的实现方式:

var index = parent.layer.getFrameIndex(window.name);
$("#createDatabase").click(function(){
	var url = $("#dbForm").attr("action");
	var param = $("#dbForm").serialize();//序列化表单值,创建 URL 编码文本字符串。
	$.post(url,param,function(data){
	        parent.layer.msg("数据库创建成功了");
		parent.layer.close(index);
	},"json");
			
});
直接一定是先发送ajax请求,在浏览器接受到服务器响应之后,进行判断后台添加操作是否成功后,再打印消息,关

闭子窗口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值