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请求,在浏览器接受到服务器响应之后,进行判断后台添加操作是否成功后,再打印消息,关
闭子窗口。