# 第二種 iframe彈窗
## 10.2.第二種 iframe彈窗
iframe彈窗是彈窗內容頁面和表格頁面是兩個頁面,減少每個頁面的代碼量,彈窗類型type=2。
表格頁面,list.html:
~~~
<button id="btnAddUser" class="layui-btn">添加</button>
<table id="tableUser" lay-filter="tableUser"></table>
<!-- 表格操作列 -->
<script type="text/html" id="tableBarUser">
<a class="layui-btn" lay-event="edit">修改</a>
<a class="layui-btn" lay-event="del">刪除</a>
</script>
<!-- js部分 -->
<script>
layui.use(['layer', 'table', 'admin'], function () {
var $ = layui.jquery, layer = layui.layer, table = layui.table, admin = layui.admin;
// 渲染表格
var insTb = table.render({
elem: '#tableUser',
url: '../../json/user.json',
cols: [[
{field: 'nickName', title: '用戶名'},
{field: 'sex', title: '性別'},
{toolbar: '#tableBarUser', title: '操作'}
]]
});
// 添加
$('#btnAddUser').click(function () {
showEditModel();
});
// 工具條點擊事件
table.on('tool(tableUser)', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') { // 修改
showEditModel(data);
} else if (layEvent === 'del') { // 刪除
layer.msg('點擊了刪除', {icon: 2});
}
});
// 顯示表單彈窗
function showEditModel(mUser) {
var layIndex = admin.open({
type: 2,
title: (mUser ? '修改' : '添加') + '用戶',
content: 'userForm.html',
data: { user: mUser }, // 使用data參數傳值給彈窗頁面
end: function () { // 監聽彈窗關閉
if (admin.getLayerData(layIndex, 'formOk')) { // 判斷表單操作成功標識
insTb.reload(); // 成功刷新表格
}
}
});
}
});
</script>
~~~
彈窗頁面,userForm.html:
~~~
<html>
<head>
<link rel="stylesheet" href="assets/libs/layui/css/layui.css"/>
<link rel="stylesheet" href="assets/module/admin.css"/>
</head>
<body>
<form id="modelUserForm" lay-filter="modelUserForm" class="layui-form model-form">
<input name="userId" type="hidden"/>
<div class="layui-form-item">
<label class="layui-form-label">用戶名</label>
<div class="layui-input-block">
<input name="nickName" class="layui-input" placeholder="請輸入角色名" lay-verType="tips" lay-verify="required" required/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">性別</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="男" title="男" checked/>
<input type="radio" name="sex" value="女" title="女"/>
</div>
</div>
<div class="layui-form-item text-right">
<button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
<button class="layui-btn" lay-filter="modelSubmitUser" lay-submit>保存</button>
</div>
</form>
<!-- js部分 -->
<script type="text/javascript" src="assets/libs/layui/layui.js"></script>
<script type="text/javascript" src="assets/js/common.js"></script>
<script>
layui.use(['layer', 'form', 'admin', 'formX'], function () {
var $ = layui.jquery, layer = layui.layer, form = layui.form, admin = layui.admin, formX = layui.formX;
var mUser = admin.getLayerData().user; // 獲取列表頁面傳遞的數據
// 回顯數據,這里一定要用formX.val,form.val不能回顯跨iframe的數據
formX.val('modelUserForm', mUser);
// 表單提交事件
form.on('submit(modelSubmitUser)', function (data) {
layer.load(2);
var url = mUser ? '/updateUser' : '/addUser';
$.post(url, data.field, function (res) {
layer.closeAll('loading');
if (res.code == 200) {
layer.msg(res.msg, {icon: 1});
admin.putLayerData('formOk', true); // 設置操作成功的標識
admin.closeThisDialog(); // 關閉當前iframe彈窗
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
return false;
});
});
</script>
</body>
</html>
~~~
content參數寫表單的頁面url,在end回調里面判斷操作成功的標識然后刷新表格,end是彈窗關閉的回調,
參數傳遞的詳細介紹請看下面章節的詳細介紹。
iframe彈窗的優點是頁面獨立,減少代碼量,降低耦合,缺點是如果頁面有下拉框、日期選擇等,它們的范圍不能超出彈窗的范圍,
會導致彈窗出現滾動條,甚至不顯示出來,下面章節介紹的url方式彈窗解決了這些缺點。
- 更新日志
- 開始使用
- 導入項目
- 項目結構
- index.html結構說明
- 添加一個菜單
- common.js說明
- 修改默認配置
- ID命名規范
- index模塊
- 加載默認主頁
- 打開一個選項卡
- 關閉指定選項卡
- 清除Tab記憶
- 修改Tab標題
- 切換Tab自動刷新
- 側邊欄手風琴折疊
- admin模塊(基礎)
- 全部方法
- 彈窗相關方法
- 加載層loading
- ajax封裝
- 緩存操作putTempData
- 鎖屏功能
- ew-event事件綁定
- open彈窗事件
- logout事件
- admin模塊(進階)
- 文字提示
- 地圖選擇位置
- 裁剪圖片
- 動畫數字
- 經緯度轉換
- 深度克隆對象
- 判斷富文本是否為空
- 移除指定style
- 模板引擎
- 滾動到頂部
- 事件監聽
- 動態模板
- 公共樣式
- 公共類
- 組件樣式
- 表單彈窗
- 表格工具欄
- 垂直選項卡
- 徽章擴展
- 下拉樹單選
- fixed方式select
- 擴展組件(常用)
- 1.下拉菜單
- 快速使用
- 更多樣式
- 對任意元素使用
- 帶遮罩層
- 自定義下拉內容
- 控制顯示方向
- 在數據表格中使用
- 氣泡確認框
- 2.消息通知
- 快速使用
- 全部方法
- 參數列表
- 解決彈窗遮擋
- 3.級聯選擇器
- 快速使用
- 異步加載
- 自定義分隔符
- 搜索功能
- 省市區選擇
- 全部方法
- 全部參數
- 4.標簽輸入框
- 快速使用
- 全部參數
- 5.分割面板
- 快速使用
- 垂直分割
- 嵌套使用
- 6.環形進度條
- 快速使用
- 全部參數
- 自定義樣式
- 7.步驟條
- 快速使用
- 風格選擇
- 上一步下一步
- 禁止標題點擊
- 擴展組件(進階)
- 1.表單擴展tableX
- 全部方法
- 合并單元格
- 行綁定鼠標右鍵
- 后端排序
- 前端分頁排序
- 導出數據
- 導出全部、搜索
- 后端導出
- 2.表單擴展formX
- 驗證規則
- 擴展方法
- 渲染select封裝
- 驗證碼倒計時
- 獲取修改字段
- 3.打印插件
- 打印當前頁面
- 設置不打印元素
- 打印自定義內容
- 分頁打印
- 拼接html
- 4.鼠標右鍵
- 快速使用
- 自定義使用
- 動態元素綁定
- 5.數據列表dataGrid
- 快速使用
- 全部參數
- 分頁功能
- 加載更多功能
- 實例方法
- 自動渲染
- 6.文件選擇器
- 快速使用
- 全部參數
- 第三方插件
- 鼠標滾輪監聽
- 二維碼模塊
- 引導插件
- 剪貼板
- 視頻播放器
- 富文本編輯器
- 更多功能
- 主題功能
- 自定義擴展模塊
- 增加按鈕權限控制
- table統一設置headers
- 彈窗專題
- 第一種 頁面層彈窗
- 第二種 iframe彈窗
- 第三種 url方式彈窗
- 第四種 捕獲層彈窗
- 四種方式選擇指南
- admin.modelForm方法
- 參數傳遞方法詳解
- 刷新url方式彈窗
- 彈窗使用模板引擎
- 彈窗內組件不渲染
- 常見問題
- 后端生成側邊欄
- ajax加載側邊欄
- 多系統模式
- logo文字換行顯示
- 側邊欄全部展開
- 側邊欄折疊圖標放大
- 彈窗下拉框出現滾動條
- 彈窗寬度不能超出屏幕
- 表單文字出現換行
- select、radio不顯示
- 日期laydate不能顯示
- 彈窗打開后按enter無限打開
- 表單提交post變成了get
- 修改表格背景和邊框顏色
- 修改placeholder顏色
- IE數據表格緩存嚴重
- 使用parent.layer問題
- 表格打印太長列未換行
- 彈窗layer.js報錯404
- 表格請求去掉page和limit
- 側邊欄折疊卡頓
- 圖片表格點擊查看
- 常用實例
- 表格內switch獲取行數據
- 表格回顯復選框
- 表格工具列動態顯示
- 表單提交數組
- 重載表格重置排序
- laydte動態控制日期限制
- 下拉樹一些數據不可選
- 修改彈窗禁用輸入框
- 表格中下拉框數據動態
- 實現點擊后轉一圈
- 頁面下拉框數據動態
- 表格動態tool事件處理
- 表格復選框和序號列合并
- 表單提交帶文件上傳
- 單標簽模式加居中文字