转载自:http://www.884358.com/php-layer/
在开发中经常会遇到点击按钮弹出展示表单,在表单中填写信息后,点击保存,最后返回列表页的情况。
我们想实现的比较友好的效果通常是:用户点击按钮弹出子窗口,填写完子窗口中的表单信息后,点击子窗口中的保存按钮,页面提示保存成功,并关闭子窗口,最后刷新父页面。
为了更加优雅的弹出子窗口,我们使用了layer这一款优秀的jQuery插件。在使用过程中,可以很方便的弹出我们想要的页面,例如表单填写页面。
例如如下页面:
<!DOCTYPE html>
<html lang="en">
<head>
<title> 弹窗测试 </title>
<meta charset="utf-8"/>
<script src="https://cdn.bootcss.com/jquery/2.0.2/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/layer/3.0.1/layer.min.js"></script>
</head>
<body>
<button id="parentIframe">点击弹出窗口</button>
</body>
</html>
<script>
function refresh() {
location.reload();
}
//弹出一个iframe层
$('#parentIframe').on('click', function () {
layer.open({
type: 2,
title: '点击弹出窗口',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['800px', '520px'],
content: 'http://127.0.0.1/test/layer/form.php'
});
});
</script>
点击“点击弹出窗口”按钮,页面会弹出子窗口显示http://127.0.0.1/test/layer/f...的页面内容,form.php的代码如下:
<?php
if ($_POST) {
//处理你的业务...
echo "<script>parent.parent.layer.closeAll();parent.parent.layer.msg('添加成功,页面正在刷新');parent.parent.setTimeout('refresh()',2000);</script>";
die;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title> 弹窗测试 </title>
<meta charset="utf-8"/>
</head>
<body>
<iframe name="iframe" id="iframe" style="display:none"></iframe>
<form action="#" method="post" target="iframe">
<table border="1">
<tr>
<td>姓名</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td colspan='2'><input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
</html>
注意表单form的target属性是指向的本页面的iframe,target的名称即为iframe的name。当填写了表单上的信息后,点击提交按钮,页面会将form表单中的信息提交到iframe中,由于iframe没有指定src属性,所以iframe的地址是页面自己,同时设置了display:none,所以是不可见的(为了便于观察效果,你也可以暂时先把display:none删除)。所以等同于表单提交到页面自身,只不过是展示在了自身的iframe里。自身的php代码里识别到了post过来的数据,则会输出一句js代码,js代码的目的是关闭顶级父窗口的layer弹出窗,并在顶层父窗口中显示提示信息,最后让顶级父页面在两秒钟后刷新自己。