layui checkbox 默认为原生样式,需显式添加 lay-skin="primary"、name 属性,并在 DOM 插入后调用 form.render('checkbox') 才能启用美化与事件。

layui checkbox 默认不是 primary 风格,必须显式声明
layUI 的 checkbox 默认渲染为原生浏览器样式(带圆角、灰色、无动画),不是你看到文档里那种方形勾选框。所谓“primary 风格”是 layui 提供的美化皮肤,但不会自动启用——它需要你手动加属性才能激活。
不加 lay-skin="primary",form.render() 也不会把它变成方形;即使写了 class="layui-form-checkbox",没这个属性照样是原生丑方块。
- HTML 中每个
必须带上lay-skin="primary" - 必须有
name属性(否则form.val()读不到值,且事件绑定可能失效) - 必须在 JS 中调用
form.render('checkbox'),否则 DOM 里还是原生 input,伪元素根本没生成
form.render('checkbox') 调用时机错了就白配
常见错误是把 form.render('checkbox') 写在 DOM 加载前,或者写在 table.render() 之前——尤其当 checkbox 在表格行内动态生成时,table.reload() 后 DOM 已更新,但 form 模块并不感知,必须手动再 render 一次。
- 确保
layui.use(['form'], ...)已正确引入form模块 - 如果 checkbox 在页面加载后插入(如 AJAX 渲染表格、layer 弹窗内容),render 必须放在插入操作之后
- 不要依赖 “页面一加载就自动渲染”——layui 不会监听页面变动,只认你调用的那一瞬间的 DOM 状态
- 可以合并调用:
form.render('checkbox'); form.render('radio');
样式生效但还是圆角?检查是否被更高优先级规则覆盖
primary 风格本应是 16×16 像素的方形边框 + 白底黑勾,但如果你发现边框仍是圆角、或尺寸不对,大概率是 CSS 被其他规则干扰了。layui 的 primary checkbox 依赖两个关键伪元素:
- v2.8+:用
.layui-form-checkbox[lay-skin="primary"]::before控制外框(border)、::after控制勾选图标(background-color) - 若你只改了
::after却没碰::before,外框圆角可能来自全局重置或第三方 CSS - 检查浏览器开发者工具里,
::before的border-radius是否被设为2px或其它值——要强制设为0 - 局部覆盖写法示例:
.layui-form-checkbox[lay-skin="primary"]::before { border-radius: 0 !important; }
动态表格里 checkbox 点击没反应?事件委托没配对
表格用 table.render() 或 table.reload() 生成的行,里面的 checkbox 是后来插入的 DOM,直接写 form.on('checkbox(filter)', ...) 会失效——因为事件监听器注册时那些元素还不存在。
- 正确做法是用事件委托:监听表格容器(比如
.layui-table),再过滤目标元素$(document).on('click', '.layui-table [name="rowSelect"]:checkbox', function() { ... }); - 或者更稳妥:在
table.reload()的done回调里重新绑定form.on,并立刻调用form.render('checkbox') - 别忘了给 checkbox 加
lay-filter="rowSelect",否则form.on根本收不到事件 - 如果用了
skin: 'row',还要额外确认.layui-table-row容器下 checkbox 的选择器是否匹配
真正卡住人的从来不是“怎么写”,而是“写在哪”和“什么时候写”。lay-skin="primary" 这一行属性漏掉,后面所有样式和事件都白搭;form.render() 少调一次,DOM 就永远停留在原生状态。这些点不盯死,调试半天也看不出问题在哪。











