最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
layui文本域怎么在表格单元格中嵌入
时间:2026-09-06 14:33:49 编辑:袖梨 来源:一聚教程网
在前端开发内容学习中,layui文本域怎么在表格单元格中嵌入是常见主题。很多人在阅读时会遇到概念分散、步骤不清和注意点难以归纳的问题。本文按照基础概念、操作流程和关键细节,对相关内容进行整理。
Layui表格edit不支持'textarea'字符串,需用函数返回带layui-textarea类的textarea HTML,并在done回调中绑定click事件聚焦,且须手动读取值并调用obj.update()更新缓存。
edit 属性不支持 'textarea' 字符串
直接写 edit: 'textarea' 会静默失败——Layui 表格的 edit 白名单里只有 'text'、'number'、'select' 等,'textarea' 不在其中,也不会渲染成多行输入框。
真正生效的方式是把 edit 设为函数,返回带 layui-textarea 类的 HTML 字符串:
{field: 'desc', title: '描述', edit: function(d) {
return '<textarea class="layui-textarea" style="height: 80px; resize: none;">' + (d.desc || '') + '</textarea>';
}}
- 必须加
class="layui-textarea",否则样式丢失、边框不统一 -
style="height: 80px"控制默认高度,不然可能只显示一行 -
resize: none防止用户拖拽改变大小,破坏表格布局 - 函数内要手动拼接初始值,
edit: 'text'那种自动填值逻辑不会触发
双击后 textarea 不聚焦?得手动绑定 click 并 stopPropagation
即使返回了 textarea,点击单元格时它也不会自动获得焦点,用户还得再点一次才能输入。这是因为 Layui 的编辑流程没接管自定义模板的 focus 逻辑。
解决方案是在 table.render() 的 done 回调里,对新插入的 textarea 绑定事件:
done: function(res, curr, count) {
layui.$(this.elem).find('textarea').each(function() {
this.addEventListener('click', function(e) {
e.stopPropagation();
this.focus();
this.setSelectionRange(this.value.length, this.value.length);
});
});
}
- 一定要用
e.stopPropagation(),否则 click 会冒泡到<td>,可能误触发行选中或跳转 - 别用
layui.$(this).focus(),jQuery 的focus()在某些版本里对动态插入的textarea不可靠 - 如果表格启用了
editTrigger: 'dblclick',监听click就够了;若设为'click',需确保单击不重复触发(比如避免多次绑定)
编辑完怎么取值并更新缓存?obj.value 是空的
table.on('edit(filter)', callback) 里的 obj.value 总是空字符串——因为 edit 函数返回的是自定义 HTML,Layui 没法自动读取 textarea 的值,它只对原生 edit: 'text' 的 <input> 有内置取值逻辑。
必须手动读取并调用 obj.update():
table.on('edit(test)', function(obj){
var value = obj.tr.find('textarea').val();
obj.update({ desc: value });
});
- 不能依赖
obj.value,它不可靠 - 用
obj.tr.find('textarea').val()精准取当前行该单元格的值 - 调用
obj.update({ field: value })才能同步到表格数据源和视图 - 如果字段名是动态的(比如根据
d.field),记得从obj.field取键名
容易被忽略的兼容性细节
这套方案在 Layui 2.7+ 上稳定,但有几个边界情况常被漏掉:
- 表格启用
loading: true或分页重载时,done回调会反复执行,textarea事件可能重复绑定——建议先off('click')再on - 移动端 Safari 对
textarea自动聚焦支持不稳定,可加setTimeout(() => this.focus(), 100)兜底 - 如果列用了
templet,且内部有其他事件(如按钮),要确保textarea不被包裹在可点击容器里,否则stopPropagation失效 -
layui-textarea默认有padding和line-height,高度设为80px时,内容可能上下溢出——建议用box-sizing: border-box保证尺寸准确
整体来看,layui文本域怎么在表格单元格中嵌入的重点在于把核心概念、操作流程和注意事项串起来理解。实际使用时,可以先确认基础条件,再结合具体场景逐项排查和调整,这样处理同类问题会更稳妥。