Layui的layui.open打开的iframe页面执行form.render()无效的解决办法

在html代码与引入的layui正确时,layui.open可能出现form.render()渲染无效情况。可通过获取新窗口对象,用form.render()重新渲染来解决该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载于:https://blog.youkuaiyun.com/xunmzy/article/details/83316902

在html代码与引入的layui正确的情况下,layui.open有时候会出现form.render()渲染无效的情况,
这时候可以通过获取新窗口的对象来通过form.render()重新渲染

var indexTpl = layui.layer.open({
            title: name,
            type: 2,
            content: url,
            maxmin: true,
            area: ['60%', '90%'],
            success: function (layero, index) {
                	// 新iframe窗口的对象
                    var iframeWin = layero.find('iframe')[0].contentWindow;
                    // 重新渲染checkbox,select同理
                    iframeWin.layui.form.render('checkbox');
            },
        });

这样就可以解决form.render()渲染无效的情况了。

### 动态创建Checkbox并与表单提交绑定 为了实现在Layui `layer.open` 弹出层中动态添加 `checkbox` 并将其与表单提交绑定,可以按照如下方式操作: #### 准备工作 确保已经正确引入了 Layui 插件[^3]。 ```html <link rel="stylesheet" href="./layui/css/layui.css"> <script src="./layui/layui.js"></script> ``` #### 创建HTML结构 定义一个用于显示弹出层的基础 HTML 结构。这里使用了一个 div 容器来承载整个表单内容,并设置了类名 `layui-form` 来启用 Layui 表单样式[^2]。 ```html <div id="popupForm" style="display:none;"> <form class="layui-form" action=""> <!-- checkbox 将在此处动态生成 --> <div id="dynamicCheckboxes"></div> <button type="submit" class="layui-btn">提交</button> </form> </div> ``` #### JavaScript逻辑 通过JavaScript 实现动态加载 `checkbox` 和处理表单提交事件。当调用 `layer.open()` 方法打开新窗口时,可以在回调函数内执行必要的 DOM 操作以插入新的输入控件;同时监听表单的 submit 事件以便捕获用户提交的数据[^1]。 ```javascript // 初始化 layui 组件 layui.use(['layer', 'form'], function(){ var layer = layui.layer; var form = layui.form; // 打开弹出层并初始化数据 layer.open({ title: '选择项', content: $('#popupForm').html(), success: function(layero, index){ // 假设我们有一组选项列表 let options = ['Option A', 'Option B', 'Option C']; // 遍历这些选项并将它们转换成 Checkbox 控件 $.each(options, function(i, optionText){ $(`<input type="checkbox" name="options[]" value="${optionText}" title="${optionText}"><br>`).appendTo('#dynamicCheckboxes'); }); // 更新表单渲染状态 form.render('checkbox'); // 提交表单时触发的动作 $('form.layui-form').on('submit', function(e){ e.preventDefault(); // 阻止默认行为 // 获取选中的值 const selectedValues = []; $("input[name='options[]']:checked").each(function() { selectedValues.push($(this).val()); }); console.log(selectedValues); // 输出已勾选的内容到控制台 // 关闭当前弹窗 layer.close(index); }); } }); }); ``` 上述代码展示了如何在 Layer 弹出层内部构建带有可交互性的复选框,并且能够响应用户的点击动作收集所做选择的信息。注意这里的 `$.each` 是 jQuery 的语法糖,如果项目不依赖于 jQuery,则需替换为原生 JS 或其他库的方法实现相同功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值