Layui switch 必须用 form.on('switch(filter)') 监听,不能用 jQuery .val();需在 table.done 中 render,手动改状态要用 layui.form.switch() 并同步 table.cache。

直接用 $("input[name='xxx']").val() 拿不到实时状态,因为 Layui 的 switch 是用 div 模拟的,原生 input 被隐藏且 value 不随点击更新。
form.on('switch(filter)') 是唯一可靠监听方式
必须通过 Layui 的表单模块事件监听,不能依赖原生 DOM 属性或 jQuery 的 .val()、.prop('checked')(后者在未 render 前可能读到旧值)。
-
layui.use(['form'], function(){})确保 form 模块已加载 - switch 标签必须带
name属性,且与form.on('switch(xxx)')中的xxx一致 - 回调参数
data.elem.checked就是真实开关状态(true或false),不是字符串 - 如果需要业务 ID,建议用自定义属性如
data-id="{{d.id}}",再通过data.elem.dataset.id获取
表格中 switch 必须在 done 回调里重新 render
表格翻页、重载、搜索后,新渲染的 switch 元素不会自动绑定事件,不 render 就监听不到点击。
创建并切换AI助手人格。使用 /personality 列出并激活已保存的人格;使用 /create-personality 设计新角色,自动填充 SOUL 与 IDENTITY。跨会话和对话压缩时人格持久化,自动恢复心跳。原子切换提供备份与回滚保护,切换前始终备份当前状态。
- 在
table.render()配置中写done: function() { layui.form.render('switch'); } - templet 里的 switch 必须有
name和统一的lay-filter,例如:<input type="checkbox" name="status" lay-filter="tableSwitch" lay-skin="switch"> - 不要动态拼
lay-filter="status_{{d.id}}"——form.on()不支持变量 filter,会失效
手动改状态要用 layui.form.switch() 或模拟点击
代码控制开关(比如接口返回后设默认值),不能只改 elem.checked = true,UI 不会同步。
- Layui ≥ 2.8:
layui.form.switch('status', true)—— 第二个参数是布尔值,同时更新 DOM 和底层 input - Layui < 2.8:
$('input[name="status"]').prop('checked', true).next().click(),.next()是 Layui 生成的开关容器 - 注意:手动触发后,
form.on('switch()')回调**不会自动执行**,业务逻辑要自己补上
最常被忽略的是 table.cache 不更新 —— 你点了开关,data.elem.checked 拿到了,但 table.cache['myTable'][index].status 还是旧值,导出、排序、reload 全错。每次监听回调里必须手动同步这行数据。

















