“回填”复选框

该博客介绍了一种在页面重新加载后自动恢复复选框选中状态的技术。通过将用户勾选的复选框状态存储在session中,在页面加载时读取session数据并重新勾选相应的复选框。提供了控制器保存session的方法代码和回填复选框的JavaScript代码示例。
  1. 将勾选中的复选框 ,再进行一次加载时将原有的复选框中的√自动勾选上
  2. 具体的演示效果如下图 ,先勾选上 ,再点击猪肉进行一次加载 ,这时候页面上会自动将原先勾选上的勾再次勾选上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 具体实现的代码如下 ,将勾选上勾的数据保存到session中
//定义两个数组
var inputHaveChecked = new Array(); //存放已被勾选的input框
var inputNotHaveChecked = new Array(); //存放没有被勾选的input框
//点击复选框方法(获取到所有已经勾选的复选框的ID值(wgItemID))
$("#wineGreensImage").on("click" ,"input" , function () {
var wgItemID = $(this).val();
//判断被点击后是否有checked这个属性
    if ( $(this).prop("checked") == true) {
//判断该ID在have中是否存在
        if (inputNotHaveChecked.indexOf(wgItemID) > -1 ) {
            inputHaveChecked = removeValueInArray(wgItemID , inputHaveChecked);
        }
else
{
             inp
<think>我们在使用Layui弹出层时,经常需要重置表单状态,特别是复选框。根据用户需求,每次打开弹出层时,需要重置复选框的选中状态。我们可以通过以下步骤实现: 1. 在弹出层页面(子层)中,编写一个重置复选框的函数。 2. 在父层打开弹出层时,可以传递重置函数给子层,或者在子层加载完成后自动重置。 3. 利用Layui的form模块重新渲染复选框。 具体实现如下: ### 方法1:在弹出层页面加载时重置 在弹出层页面(即子层)中,我们可以利用Layui的`form`模块来重置复选框。在子层页面的JavaScript中,可以在页面加载完成后立即执行重置操作。 假设子层页面(/selectProduct)中的复选框结构如下: ```html <form class="layui-form"> <div class="layui-form-item"> <input type="checkbox" name="hobby" value="1" title="阅读"> <input type="checkbox" name="hobby" value="2" title="写作" checked> <input type="checkbox" name="hobby" value="3" title="运动"> </div> </form> ``` 在子层页面的JavaScript中: ```javascript layui.use(['form'], function(){ var form = layui.form; // 重置所有复选框为未选中状态 $('input[type="checkbox"]').each(function(){ $(this).removeAttr('checked'); }); // 重新渲染复选框 form.render('checkbox'); }); ``` ### 方法2:父层在打开弹出层时传递重置指令 如果希望由父层控制子层的重置,可以在打开弹出层时传递一个参数,告诉子层需要重置。在子层中监听父层传递的参数。 父层打开弹出层时传递参数: ```javascript layer.open({ title: '选择产品', type: 2, area: ['70%', '60%'], content: '/selectProduct?reset=true', // 传递reset参数 // 其他参数... }); ``` 在子层页面中,解析URL参数,如果存在reset参数且为true,则执行重置: ```javascript layui.use(['form', 'jquery'], function(){ var form = layui.form, $ = layui.jquery; // 获取URL参数 function getQueryParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } if (getQueryParam('reset') === 'true') { // 重置复选框 $('input[type="checkbox"]').each(function(){ $(this).removeAttr('checked'); }); form.render('checkbox'); } }); ``` ### 方法3:通过弹出层的回调函数重置(推荐) 另一种更直接的方式是在父层打开弹出层后,通过操作子层的DOM来重置。这需要利用`layer.open`的`success`回调函数,在弹出层加载完成后执行重置操作。 父层代码: ```javascript layer.open({ title: '选择产品', type: 2, content: '/selectProduct', area: ['70%', '60%'], success: function(layero, index){ // 获取子层的body var body = layer.getChildFrame('body', index); // 在子层中重置复选框 body.find('input[type="checkbox"]').each(function(){ $(this).removeAttr('checked'); }); // 重新渲染复选框,需要用到子层的form var childForm = body.find('.layui-form'); if (childForm.length > 0) { layui.form.render('checkbox', childForm.selector); // 注意:这里需要指定渲染的表单容器 } } }); ``` 注意:由于Layui的form模块需要知道渲染的范围,所以我们在重新渲染复选框时需要指定表单的容器。但是,这种方式需要确保子层的Layui form已经初始化,并且父层能够访问到子层的DOM。由于跨iframe的操作,可能受到同源策略的影响,如果子层与父层同源则没有问题。 ### 方法4:使用子层暴露的全局函数 在子层中定义一个全局函数供父层调用,例如: 子层页面: ```javascript function resetCheckboxes() { $('input[type="checkbox"]').each(function(){ $(this).removeAttr('checked'); }); layui.form.render('checkbox'); } ``` 父层在打开弹出层后,可以通过`success`回调来调用子层的全局函数: ```javascript layer.open({ // ...其他参数 success: function(layero, index){ var childWindow = layer.getChildFrame(window, index); childWindow.resetCheckboxes(); } }); ``` ### 总结 以上提供了多种方法来实现每次打开弹出层时重置复选框的选中状态。根据实际项目结构和需求选择合适的方法。其中,方法3和方法4需要确保父层能够访问到子层的DOM或全局函数,适用于同源页面。方法1和方法2则更依赖于子层自身的逻辑。 §§相关问题§§ 1. Layui中如何动态重置表单的其他元素(如单选、下拉框)? 2. Layui弹出层如何实现数据回填? 3. 在Layui中,如何避免弹出层多次打开导致的事件重复绑定? 4. Layui的复选框有哪些常用事件?如何监听复选框的选中状态变化?</think>### Layui 弹出层每次打开时重置复选框选中状态的实现方法 在 Layui 弹出层中重置复选框状态,可通过以下步骤实现: #### 核心方案 1. **在弹出层打开时执行重置** ```javascript layer.open({ title: '选择产品', type: 2, content: '/selectProduct', success: function(layero, index) { // 获取子层DOM const childBody = layer.getChildFrame('body', index); // 重置所有复选框 childBody.find('input[type="checkbox"]').prop('checked', false); // 重新渲染表单 layui.form.render('checkbox'); } }); ``` 2. **子层独立重置方案(推荐)** 在弹出层页面添加初始化函数: ```javascript // 子层页面中 function resetCheckboxes() { $('input[type="checkbox"]').each(function() { $(this).prop('checked', false); }); layui.form.render('checkbox'); // 关键:重新渲染 } // 页面加载时自动执行 $(function() { resetCheckboxes(); }); ``` #### 完整实现示例 ```html <!-- 父层页面 --> <script> layui.use(['layer', 'form'], function(){ const layer = layui.layer; const form = layui.form; // 打开弹出层按钮事件 $('#openLayer').click(function(){ layer.open({ title: '选择产品', type: 2, area: ['800px', '500px'], content: 'select.html', success: function(layero, index){ // 重置子层复选框(方法1) const iframeWin = window[layero.find('iframe')[0]['name']]; iframeWin.resetCheckboxes && iframeWin.resetCheckboxes(); } }); }); }); </script> <!-- 子层页面 (select.html) --> <div class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">选项</label> <div class="layui-input-block"> <input type="checkbox" name="option" title="选项1"> <input type="checkbox" name="option" title="选项2"> <input type="checkbox" name="option" title="选项3"> </div> </div> </div> <script> // 子层重置函数 function resetCheckboxes() { $('input[type="checkbox"]').each(function() { $(this).prop('checked', false); }); layui.form.render('checkbox'); // 必须重新渲染 } // 页面加载时重置 layui.use('form', function(){ resetCheckboxes(); }); </script> ``` #### 关键点说明 1. **跨iframe操作**:使用`layer.getChildFrame()`获取子层DOM 2. **状态重置**:`prop('checked', false)`直接修改复选框状态 3. **重新渲染**:`layui.form.render('checkbox')`更新UI显示 4. **多页签处理**:结合`table.setLayuiPageCheckedIds()`处理表格复选框[^2] #### 常见问题解决 - **动态内容加载**:对于异步加载的复选框,在数据加载完成后调用`resetCheckboxes()` - **表格复选框**:使用`table.initPageCheckedIds('tableId', '')`清空选中[^2] - **事件冲突**:避免使用`shadeClose:true`时误触发重置,可改用`end`回调
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值