layui表单元素radio,checked,select不显示渲染

当使用layui框架时,如果表单元素是动态添加的,可能不会显示。原因是layui在初始化时无法识别这些新添加的元素。解决方法是在动态添加内容后,使用layui.form.render()来渲染表单,确保select、checkbox、radio等元素能正确显示。同时,记得为动态生成的组件添加lay-filter属性以便于渲染。

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

1.问题描述
使用layui框架的时候,不知道怎么回事单选框,复选框不显示。
在这里插入图片描述
2.为什么表单不显示?

当你使用表单时,layui 会对 select、checkbox、radio 等原始元素隐藏,从而进行美化修饰处理。但如果您的表单元素是动态添加的,那么在组件初始加载的时候是无法读取到的。

3.解决方法

只需执行一个视图渲染的实例即可(在scprit标签中写)

layui.use('form', function(){
                    let form = layui.form;
                    form.render();   //更新所有form表单
                    // form.render('select','aihao');
                    //form.render('组件名','lay-filter名')
                });

同理的还有 element 模块

4.具体操作(可以更新整个表单,也可以更新单个组件)

  • 我是更新整个form表单

4.1在select,radio,checkbox等组件上记得要加上 lay-filter=" ",用于在js中做渲染
在这里插入图片描述
4.2.对form表单的组件进行渲染

layui.use('form', function(){
                    let form = layui.form;
                    form.render();   //更新所有form表单
                    // form.render('select','aihao');
                    //form.render('组件名','lay-filter名')
                });

这段代码加在 动态加入的代码后面,如下所示

    $("#person_info").click(function (){
    // 清空内容
    $(".layui-card-body").empty();

    // 发送ajax请求 展示个人信息
    $.ajax({
        url:"/users/detail",
        type:"GET",
        // data:"username="+username+"&password="+password,
        // data:{"username": username, "password": password}, 不需要发送请求
        dataType:"JSON",
        success:function (json){
            if (json.state == 200){
                let html = ' <!-- 给容器追加 class="layui-form-pane",即可显示为方框风格 -->\n' +
                    '                    <form class="layui-form layui-form-pane" action="">\n' +
                    '\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                            <label class="layui-form-label">用户名</label>\n' +
                    '                            <div class="layui-input-inline">\n' +
                    '                                <input value="#{username}" type="text" name="username" placeholder="" lay-verify="required" autocomplete="off" class="layui-input">\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                             <label class="layui-form-label">密码</label>\n' +
                    '                            <div class="layui-input-inline">\n' +
                    '                                <input value="#{password}" type="password" name="password" placeholder="" lay-verify="required" autocomplete="off" class="layui-input">\n' +
                    '                            </div>\n' +
                    '<!--                            <div class="layui-form-mid layui-text-em">请务必填写用户名</div>-->\n' +
                    '                        </div>\n' +
                    '\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                            <div class="layui-inline">\n' +
                    '                                <label class="layui-form-label">邮箱</label>\n' +
                    '                                <div class="layui-input-inline">\n' +
                    '                                    <input value="#{email}" type="text" name="email" lay-verify="email" autocomplete="off" class="layui-input">\n' +
                    '                                </div>\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                            <div class="layui-inline">\n' +
                    '                                <label class="layui-form-label">电话号码</label>\n' +
                    '                                <div class="layui-input-inline layui-input-wrap">\n' +
                    '                                    <input value="#{telephone}" type="tel" name="telephone" lay-verify="required|phone" autocomplete="off" lay-reqtext="请填写手机号" lay-affix="clear" class="layui-input demo-phone">\n' +
                    '                                </div>\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                            <label class="layui-form-label">爱好</label>\n' +
                    '                            <div class="layui-input-inline">\n' +
                    '                                <select name="interest" lay-filter="aihao">\n' +
                    '                                    <option value=""></option>\n' +
                    '                                    <option value="0">写作</option>\n' +
                    '                                    <option value="1" selected>阅读</option>\n' +
                    '                                    <option value="2">游戏</option>\n' +
                    '                                    <option value="3">音乐</option>\n' +
                    '                                    <option value="4">旅行</option>\n' +
                    '                                </select>\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                        <div class="layui-form-item" pane>\n' +
                    '                            <label class="layui-form-label">性别</label>\n' +
                    '                            <div class="layui-input-block">\n' +
                    '                                <input  type="radio" name="sex" value="男" title="男" checked>\n' +
                    '                                <input  type="radio" name="sex" value="女" title="女">\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                        <div class="layui-form-item" pane>\n' +
                    '                            <label class="layui-form-label">超级管理员</label>\n' +
                    '                            <div class="layui-input-block">\n' +
                    '                                <input type="radio" name="admin" value="男" title="是" checked>\n' +
                    '                                <input type="radio" name="admin" value="女" title="否">\n' +
                    '                                <input type="radio" name="admin" value="禁" title="禁用" disabled>\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                            <div class="layui-inline">\n' +
                    '                                <label class="layui-form-label">创建时间</label>\n' +
                    '                                <div class="layui-input-block">\n' +
                    '                                    <input value="#{createdTime}" type="text" name="createdtime" id="date1" autocomplete="off" class="layui-input">\n' +
                    '                                </div>\n' +
                    '                            </div>\n' +
                    '                            <div class="layui-inline">\n' +
                    '                                <label class="layui-form-label">修改时间</label>\n' +
                    '                                <div class="layui-input-inline">\n' +
                    '                                    <input value="#{modifiedTime}" type="text" name="modifiedtime" autocomplete="off" class="layui-input">\n' +
                    '                                </div>\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '\n' +
                    '\n' +
                    '                        <div class="layui-form-item layui-form-text">\n' +
                    '                            <label class="layui-form-label">个性签名</label>\n' +
                    '                            <div class="layui-input-block">\n' +
                    '                                <textarea placeholder="请输入内容" class="layui-textarea">#{signature}</textarea>\n' +
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                        <div class="layui-form-item">\n' +
                    '                            <button class="layui-btn" lay-submit lay-filter="demo2">确认</button>\n' +
                    '                            <button type="reset" class="layui-btn layui-btn-primary">重置</button>\n' +
                    '                        </div>\n' +
                    '                    </form>'
                // 拿到上面追加html的内容

                html = html.replace(/#{username}/g,json.data.username)
                html = html.replace(/#{password}/g,json.data.password)
                html = html.replace(/#{email}/g,json.data.email)
                html = html.replace(/#{telephone}/g,json.data.telephone)
                html = html.replace(/#{createdTime}/g,json.data.createdTime)
                html = html.replace(/#{modifiedTime}/g,json.data.modifiedTime)
                html = html.replace(/#{signature}/g,json.data.signature)
                // html = html.replace("#{email}",json.data.email==null ? "" : json.data.email)
                // html = html.replace("#{telephone}",json.data.telephone==null ? "" :json.data.telephone)


                $(".layui-card-body").append(html)

                // 选择器
                // if (json.data.gender != null){
                //     let radio = json.data.gender ==0 ? $("#gender-female") : $("#gender-male")
                //     radio.prop("checked","checked")
                // } else {
                //     // 性别选项默认不选
                //     $("input[name='inlineRadioOptions']").attr('checked',false);
                // }
                layui.use('form', function(){
                    let form = layui.form;
                    form.render();   //更新所有form表单
                    // form.render('select','aihao');
                    //form.render('组件名','lay-filter名')
                });


            }else {
                alert("" + json.message)
            }
        },
        error:function (xhr){
            alert("点击用户信息时产生未知的异常"+xhr.status)
        }
    });
})

在这里插入图片描述

### 使用 Thymeleaf 渲染表单元素 Thymeleaf 是一种强大的模板引擎,能够通过其特有的语法来动态生成 HTML 页面。在处理表单时,Thymeleaf 提供了一系列属性帮助开发者绑定数据、验证输入以及提交表单。 #### 基本概念 Thymeleaf 支持两种主要类型的语法:标准语法和数据属性语法[^1]。对于表单操作,通常使用 `th:` 开头的属性来进行数据绑定和其他逻辑控制。 --- #### 表单渲染的核心功能 以下是 Thymeleaf 中常见的表单相关功能及其实现方式: 1. **创建表单并设置动作** 可以通过 `th:action` 和 `th:method` 属性指定表单的动作地址和请求方法。 ```html <form th:action="@{/submitForm}" method="post"> <!-- 表单项 --> </form> ``` 2. **字段绑定** 使用 `th:field` 将表单控件与模型对象中的属性关联起来。这仅实现了双向绑定,还支持自动填充和错误提示。 ```html <input type="text" th:field="${user.name}" /> ``` 3. **选项列表** 对于下拉菜单或多选框,可以通过 `th:each` 动态生成选项,并利用 `th:selected` 或 `th:checked` 设置默认值。 ```html <select name="country" th:field="${user.country}"> <option th:each="c : ${countries}" th:value="${c.code}" th:text="${c.name}"></option> </select> ``` 4. **隐藏域** 如果需要传递额外的信息到服务器端,则可以定义隐藏域。 ```html <input type="hidden" th:name="userId" th:value="${user.id}" /> ``` 5. **按钮与链接** 利用 `th:href` 创建可点击的超链接或者自定义按钮的行为。 ```html <a href="#" class="btn btn-primary" th:href="@{/edit/{id}(id=${item.id})}">编辑</a> ``` 6. **国际化支持** 结合 Spring 的消息源机制,可以在标签内部嵌入多语言文字内容。 ```html <label th:for="'username'" th:text="#{login.username}">Username:</label> ``` 7. **校验反馈** 当后端返回错误信息时,前端可通过特定区域展示这些警告或通知给用户查看。 ```html <div th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Email Error</div> ``` 8. **禁用缓存** 在开发阶段建议关闭模板文件的缓存以便即时看到改动效果[^4]。 ```properties spring.thymeleaf.cache=false ``` 9. **静态资源配置** 确保项目内的 CSS/JS 文件能被正常加载访问。 ```properties spring.mvc.static-path-pattern=/resources/** ``` --- #### 实际案例演示 假设有一个简单的注册页面需求如下所示: - 用户名 (必填) - 密码 (至少六位字符长度) - 性别 单选男/女 - 兴趣爱好 多项勾选 如运动读书旅行等 - 自我介绍 文本区描述超过两百字 对应的HTML代码片段可能像这样编写: ```html <form th:object="${registerUser}" th:action="@{/doRegister}" method="POST"> <p>用户名:</p><input type="text" th:field="*{userName}" required /> <p>密码:</p><input type="password" th:field="*{password}" minlength="6" required /> <fieldset> <legend>性别</legend> <input type="radio" th:field="*{gender}" value="male"/> Male<br/> <input type="radio" th:field="*{gender}" value="female"/> Female </fieldset> <p>兴趣爱好:</p> <input type="checkbox" th:field="*{hobbies}" value="sports"/> Sports<br/> <input type="checkbox" th:field="*{hobbies}" value="reading"/> Reading<br/> <input type="checkbox" th:field="*{hobbies}" value="traveling"/> Traveling<br/> <textarea rows="5" cols="30" maxlength="200" th:field="*{introduction}"></textarea> <button type="submit">Submit Registration</button> </form> ``` 上述例子展示了如何综合运用各种特性完成复杂交互界面的设计工作流程[^2][^3]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值