直接用 $('#id').val('新值') 即可,但需确保 DOM 已就绪且未被 layui 表单接管;若在 layui-form 中,则必须先 form.render() 再 form.setValue()。

直接用 $('#id').val('新值') 就行,但必须确保 DOM 已就绪、没被 layui 表单模块“接管”;如果用了 layui-form 且含封装组件(如带下拉的 select),就得走 form.setValue() + form.render() 流程。
纯原生 textarea:用 jQuery val() 最快最稳
如果你的 textarea 没套在 layui-form 容器里,或者只是普通表单元素(没加 lay-filter、没调 form.render()),那它就是个标准 DOM 元素:
-
$('#desc').val('这里是描述内容')立刻生效,无需额外操作 - 别用
.text()—— 它对textarea也能设值,但语义错误,且在某些老浏览器里不可靠 - 确保 JS 执行时 DOM 已加载,比如放在
layui.use回调里,或$(document).ready()中
在 layui-form 里:必须先 render,再 setValue
一旦 textarea 被包进 class="layui-form" 并配了 lay-filter,它就进入了 layui 表单系统。此时仅改 DOM 值,UI 不同步、form.val() 也读不到:
- 赋值前必须调
form.render()(全量)或form.render('textarea', 'your-filter')(指定类型 + filter) - 然后调
form.setValue({desc: '新内容'}),其中desc是textarea的name属性值 - 如果
textarea是动态插入的(比如弹窗里 Ajax 加载的),render 必须在插入 DOM 后、setValue 前执行 -
name属性不能缺——form.setValue()完全依赖它匹配字段
textarea 带 disabled 或 readonly?赋值会静默跳过
form.setValue() 和 form.val() 都会主动忽略带 disabled 或 readonly 属性的控件,这不是 bug,是 layui 的设计逻辑:
- 直接
$('#desc').val('xxx')可能改掉 DOM 的value,但提交时仍为空,因为 layui 提交逻辑同样跳过它们 - 临时解法:赋值前移除属性,赋完再加回,例如
$('#desc').removeAttr('disabled').val('xxx') - 更推荐:用 CSS 视觉禁用,比如
style="background:#f5f5f5; color:#999; pointer-events:none;",保留 DOM 可操作性
表格中 editable 的 textarea 单元格?不能靠 setValue
Layui 表格的 edit 列不支持 'textarea' 字符串,你得用函数返回自定义 HTML。这种场景下,obj.update() 才是更新缓存的正路:
- 双击进入编辑后,
textarea是动态插入的,它的值不会自动绑定到表格数据 - 必须监听
table.on('edit(filter)', callback),但在回调里obj.value是空的 - 正确做法:在
done回调中绑定click事件聚焦,并在blur或回车时手动取值,再调obj.update({desc: this.value}) - 别忘了给
textarea加class="layui-textarea",否则样式和边框失效
最容易被忽略的一点:所有动态赋值操作,都发生在 DOM 存在之后。如果 textarea 在 layer 弹窗、tab 页签或异步加载区域里,务必确认它已真实挂载到页面上,再执行任何赋值逻辑。


















