LayUI switch 开关监听 获取属性值、更改状态

博客介绍了在设计页面时使用layui控件更改状态的方法。以后台商品列表页上下架状态修改为例,给出了html代码参考和js核心代码参考,还提醒在表格数据分页显示等需求时,完成代码替换后要再次渲染。

背景

  • 今天在设计页面时,想使用一下 LayUIswitch 控件,在需要更改状态的时候进行 ajax请求传输
  • 需要获取其中的自定义属性值,同时根据服务器返回数据进行状态的更改
  • 通过参考文档及网友的经验,在此整理一番

使用方法

场景: 后台商品列表页,进行上下架状态的修改

①. html 代码参考

  • 着重注意 我设置的两个属性值 lay-filter,switch_goods_id
<input type="checkbox" class="switch_checked" lay-filter="switchGoodsID"
                   switch_goods_id="{$vo['goods_id']}"
                   lay-skin="switch" {$vo['status_checked']} lay-text="上架|下架">

②. js 核心代码参考

  • 以我的设计思路,需要获取当前需要更改状态的商品ID,然后通过ajax回调数据,判断是否执行 “确定” 按钮后的状态改变即可
layui.use(['form'], function () {
        var form = layui.form;
        form.on('switch(switchGoodsID)',function (data) {
            //开关是否开启,true或者false
            var checked = data.elem.checked;
            //获取所需属性值
            var switch_goods_id = data.elem.attributes['switch_goods_id'].nodeValue;
            console.log(checked);
            console.log(switch_goods_id);
            layer.msg('合理搭配,展示不一样的风格', {
                time: 5000, //5s后自动关闭
                btn: ['确定', '取消']
                ,yes: function(index){
               	 	//TODO 此时进行ajax的服务器访问,如果返回数据正常,则进行后面代码的调用
                    data.elem.checked = checked;
                    form.render();
                    layer.close(index);
                    //按钮【按钮一】的回调
                }
                ,btn2: function(index){
                    //按钮【按钮二】的回调
                    data.elem.checked=!checked;
                    form.render();
                    layer.close(index);
                    //return false; //开启该代码可禁止点击该按钮关闭
                }
            });
        });
    });
  • 简化后的代码如下(不需要弹出选择界面):
    layui.use(['form'], function () {
        var form = layui.form;
        form.on('switch(switchGoodsID)',function (data) {
            //开关是否开启,true或者false
            var checked = data.elem.checked;
            //获取所需属性值
            var switch_goods_id = data.elem.attributes['switch_goods_id'].nodeValue;
            console.log(checked);
            console.log(switch_goods_id);
            //TODO 此时进行ajax的服务器访问,如果返回数据正常,则进行后面代码的调用
            var serverStatus = 1;
            if(serverStatus){
                data.elem.checked = checked;
            }else {
                data.elem.checked = !checked;
            }
            form.render();
        });
    });

附录:

  • 注意:
    当进行表格数据分页显示等需求时,注意完成代码替换后,进行再次渲染:
form.render(); //更新全部 也可以使用:layui.form.render()
form.render('select'); //刷新select选择框渲染

### 如何在 Layui 中使用 Switch 开关组件并获取当前行的数据 #### HTML 结构定义 为了确保能够正确处理每一行的数据,在表格中定义 `switch` 组件时,可以为每一个开关绑定唯一的标识符(如用户的 ID)。这可以通过自定义属性来完成。 ```html <td> <input type="checkbox" lay-filter="switchTest" id="{:uniqueId}" data-id="{:row.id}" <!-- 这里假设 row 是对象 --> {:checked ? 'checked' : ''} name="status" lay-skin="switch" lay-text="ON|OFF"> </td> ``` 上述代码片段展示了如何通过 `data-id` 属性存储每条记录的唯一标识,并利用三元运算符动态设置已选中的状态[^3]。 #### JavaScript 事件监听器配置 接下来,需要编写相应的JavaScript逻辑去捕获这些变化。这里采用的是Layui内置的形式验证机制以及表单模块提供的API接口: ```javascript layui.use(['form', 'table'], function(){ var form = layui.form; // 监听指定过滤器下的所有 switch 变化 form.on('switch(switchTest)', function(obj){ console.log(this); // DOM原生的对象 console.log(obj.othis); // 获得开关被点击前的状态,true 或者 false const currentRowData = { id: $(obj.elem).attr('data-id'), // 使用 jQuery 获取 data-id 的 status: obj.elem.checked // 判断当前是否开启 }; // 发送AJAX请求更新服务器端数据... console.log(currentRowData); }); }); ``` 这段脚本实现了当用户切换某个特定行上的开关时触发回调函数的功能。在这个回调内部不仅可以直接访问DOM元素本身(`this`)及其原始状态(`obj.otheis`),还可以轻松提取到该行的关键信息——即ID和新的开关状态[^1][^2].
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值