layui的selete、checkbox等动态样式处理

在使用layui的select、checkbox等元素时,遇到样式无效的问题,特别是在表单数据动态加载时。针对checkbox,尝试了两种方法,一种效果不稳定,另一种在多个页面测试后表现良好。对于select,发现removeAttr()后使用attr()可能无效,需要使用prop()来设置选中状态。此外,radio的选中样式问题暂未解决,将留待后续研究。推荐了一种适用于layui select的动态渲染方法,链接指向了详细的CSDN博客文章。

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

样式的无效主要是在表单的情况下点击不同数据重复调用页面的时候才会有这个困扰

使用checkbox的情况下
方法一(样式的更改有时正常,有时不行,非常奇怪)

            <div class="layui-form-item">
                <label class="layui-form-label">状态</label>
                <div class="layui-input-block">
                    <input type="checkbox" name="userStatus" lay-skin="switch" lay-filter="switch" lay-text="启用|禁用" checked>
                </div>
            </div>

根据返回值修改状态

					if (data.userStatus == 1) {
                        $(".operation_user input[name=userStatus]").attr('checked', 'checked');
                        $(".operation_user input[name=userStatus]").attr('type', 'hidden').val(1);
                        var x = document.getElementsByClassName("layui-unselect layui-form-switch");
                        x[0].setAttribute("class", "layui-unselect layui-form-switch layui-form-onswitch");
                        var d = document.getElementsByTagName('em')[0];
                        d.firstChild.nodeValue = '启用';
                    } else {
                        $(".operation_user input[name=userStatus]").attr('type', 'hidden').removeAttr("checked").val(2);
                        var x = document.getElementsByClassName("layui-unselect layui-form-switch");
                        x[0].setAttribute("class", "layui-unselect layui-form-switch");
                        var d = document.getElementsByTagName('em')[0];
                        d.firstChild.nodeValue = '禁用';
                    }
                    form.render(); //更新全部

监听

        form.on('switch(switch)', function () {
            $(".operation_user input[name=userStatus]").attr('type', 'hidden').val(this.checked ? 1 : 2);

        });

方法二(试了几个页面用,没问题)

            <div class="layui-form-item">
                <label class="layui-form-label">Status</label>
                <div class="layui-input-block" id="tanousStateUpxBK">
                    <input type="checkbox" name="tanousState" lay-skin="switch" lay-filter="switch1" id="tanousStateUp" lay-text="已审核|未审核" checked>
                </div>
            </div>
					if (data.tanousState == 2) {
                        $(".up_tailno_user input[name=tanousState]").attr('type', 'hidden').val(2);
                        $(".up_tailno_user input[name=tanousState]").attr('checked', 'checked');
                        $("#tanousStateUpxBK div").addClass("layui-form-onswitch");
                        $("#tanousStateUpxBK div em").text("已审核");
                    } else{
                        $(".up_tailno_user input[name=tanousState]").attr('type', 'hidden').val(1);
                        $(".up_tailno_user input[name=tanousState]").removeAttr("checked");
                        $("#tanousStateUpxBK div").removeClass("layui-form-onswitch");
                        $("#tanousStateUpxBK div em").text("未审核");
                    }
                    form.render(); //更新全部
        form.on('switch(switch1)', function(){
            $(".up_tailno_user input[name=tanousState]").attr('type', 'hidden').val(this.checked ? 2 : 1);
        });

select的情况下

            <div class="layui-form-item">
                <label class="layui-form-label">Type</label>
                <div class="layui-input-block">
                    <div class="layui-input-inline layui-form">
                        <select name="tnType" id="tnTypes">
                            <option value="1">公开</option>
                            <option value="2">私密</option>
                        </select>
                    </div>
                </div>
            </div>
					if (data.tnType == 1){
                        $('#tnTypes').find('option[value="2"]').removeAttr('selected');
                    } else if ((data.tnType == 2)) {
                        $('#tnTypes').find('option[value="1"]').removeAttr('selected');
                    }
                     $('#tnTypes').find('option[value='+data.tnType+']').prop('selected','selected');
                     form.render(); //更新全部

据说使用removeAttr()后再用attr()会无效,要用prop()才行,在select这里确实是,不知道第一种方法时而有效,时而无是否这个原因

        form.on('switch(switch)', function(){
            $(".operation_tailno input[name=tnState]").attr('type', 'hidden').val(this.checked ? 1 : 0);
        });

radio的情况下

<div class="layui-form-item">
   <label class="layui-form-label">状态</label>
   <div class="layui-input-block">
      <input type="radio" name="tnType" value="1" title="正常">
      <input type="radio" name="tnType" value="2" title="禁用">
   </div>
</div>
$(".detail_tailno input[name=tnType][value='1']").attr("checked", data.tnType == 1 ? true : false);
$(".detail_tailno input[name=tnType][value='2']").attr("checked", data.tnType == 2 ? true : false);

debug看的checked是加了没错,但是样式内却没显示选中,着急做其他,以后再用上的时候再研究

Layui:设置select下拉框自动选中某项

            <div class="layui-form-item">
                <div class="layui-form-label ">性别</div>
                <div class="layui-input-block">
                    <div class="layui-input-inline layui-form">
                        <select name="userSex" id="userSex">
                            <option value="">请选择性别</option>
                            <option value="1"></option>
                            <option value="2"></option>
                            <option value="3">保密</option>
                        </select>
                    </div>
                </div>
            </div>
var selectSex = 'dd[lay-value=' + data.userSex + ']';
$('#role').siblings("div.layui-form-select").find('dl').find(selectSex).click();

这是发现的最好用的select动态渲染方法,根据原理分析实现的
出自这里
https://blog.csdn.net/laiyuan999/article/details/79911674?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242
本文是为了总结给自己使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值