layer.prompt 中 formtype: 'textarea' 是最直接的多行文本域用法,自动适配高度;自定义弹层需手动写 textarea 标签并注意 dom 移动、事件绑定时机及高度自适应细节。

layer.prompt 里 formType: 'textarea' 是最直接的用法
想在弹出层里放文本域,layer.prompt 是 Layui 官方提供的原生支持方案,不用自己拼 HTML。它默认是单行输入框,但加个 formType: 'textarea' 就自动变成多行文本域,高度自适应内容(最多撑到弹层最大高度)。
常见错误是漏传 formType 或写成 'text'、'input' —— 这些都不生效,只有 'textarea' 和 2(数字 2 等价)才触发文本域渲染。
-
layer.prompt({ formType: 'textarea', title: '备注' })即可弹出带文本域的层 - 返回值是用户输入的字符串,不是 DOM 节点,别试图用
document.getElementById去查 - 如果需要限制字数或加 placeholder,得靠
success回调操作内部 input 元素:layero.find('textarea').attr('maxlength', 200)
layer.open 自定义 content 时 textarea 必须手动写 HTML
当你用 layer.open 自定义弹层结构(比如带表单、按钮、校验逻辑),就得自己写 <textarea></textarea> 标签。注意:Layui 不会帮你解析或初始化其中的 JS,所有事件绑定、属性设置都得手动做。
容易踩的坑是没设 name 属性,导致后续取值困难;或者用了 display: none 包裹整个弹层内容,结果 textarea 渲染后高度为 0。
- content 字符串里直接写:
<textarea name="desc" rows="4" style="width:100%"></textarea> - 若需动态赋值,用
success回调:layero.find('textarea').val('初始内容') - 避免在
content字符串里写<script></script>标签——Layui 不执行内联脚本
type: 1 页面层中 textarea 失焦后取不到值?检查 DOM 移动逻辑
当 type: 1 的 content 是一个已存在的 DOM 节点(比如 document.getElementById('myTextarea')),Layui 会把这个节点从原位置“挪”进弹层。问题在于:挪走后原位置 DOM 消失,如果你还在原位置监听 blur 或读 .value,就拿不到最新值。
正确做法是在 success 回调里绑定事件,或关闭前用 layero.find('textarea').val() 提取。
- 不要依赖
document.getElementById('myTextarea').value,它指向的是已被移走的旧节点 - 推荐统一用
layero参数(即弹层 DOM)来查:$(layero).find('textarea').val() - 如果用了 Vue/React 等框架,DOM 移动会导致响应式失效,此时应改用字符串 content 或 iframe 模式
textarea 高度自适应和滚动条控制很关键
纯 CSS 控制 textarea 高度在 Layui 弹层里容易失效,因为弹层容器有固定 max-height,而 textarea 默认不撑开父容器。滚动条是否出现,直接影响用户体验。
默认行为是:内容超长时出现纵向滚动条,但不会自动增高。想实现“随内容增高”,必须 JS 驱动 + CSS 配合。
- CSS 上加:
textarea { resize: none; min-height: 80px; max-height: 200px; } - JS 动态调整:
textarea.addEventListener('input', () => { textarea.style.height = 'auto'; textarea.style.height = textarea.scrollHeight + 'px'; }) - 注意:
layer.open的area参数要留足空间,比如area: ['500px', '300px'],否则自适应会被截断











