讲师中心 微信公众号
AI工具推荐 视频效率加速

Layui表格怎么实现根据行数据的不同类别渲染不同的操作按钮

陌雪姑娘_5670

陌雪姑娘_5670

发布时间:2026-05-15 06:58:03

|

554人浏览过

|

来源于php中文网

原创

templet函数必须动态返回HTML字符串,通过if/else判断d.category拼接按钮,避免静态模板、CSS隐藏或文本反推;lay-event回调中直接用obj.data.category获取原始值;字段比较前需归一化类型。

templet 函数必须写成动态返回 HTML 字符串的形式

静态字符串模板(比如 templet: '<button>编辑</button>')无法做条件判断,所有行都会渲染一模一样的按钮。唯一可行路径是让 templet 是一个函数,接收当前行数据 d,内部用 if/else 或 switch 分支决定返回什么 html。

常见错误包括:

  • 在字符串模板里写 {{ d.type }} 试图插值后加逻辑——laytpl 不支持表达式执行,只做简单替换
  • 把所有按钮都写出来再靠 CSS display: none 控制显隐——DOM 节点冗余,事件监听器全挂载,状态难同步

正确做法是:函数体内直接判断 d.category,拼出最终要渲染的按钮 HTML 字符串,不操作 DOM,不调用 laytpl,不引入额外依赖。

示例:

{field: 'category', title: '操作', templet: function(d) {
  if (d.category === 'user') {
    return '<button class="layui-btn layui-btn-xs" lay-event="edit">编辑用户</button>';
  } else if (d.category === 'order') {
    return '<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="cancel">取消订单</button>';
  } else {
    return '<button class="layui-btn layui-btn-xs layui-btn-warm" lay-event="view">查看详情</button>';
  }
}}

lay-event 回调里必须用 data 参数取真实状态,不能解析按钮文本

按钮文字变了,但点击后业务逻辑仍需知道这行原始的 category 值。如果靠 $(e.elem).text() 反推,一旦按钮文案被翻译、被样式遮挡、或前端临时改了文字,整个逻辑就崩了。

正确方式是:监听 tool(tableId) 事件,在回调函数的 obj.data 中直接读取字段:

  • obj.data.category 就是该行原始数据中的值,和渲染时传给 templet 的 d.category 完全一致
  • 不需要查 table.cache,也不需要 obj.tr 找父节点再查属性
  • 只要没在 parseData 里篡改过字段,这个值就是可信的

注意:lay-event 绑定的是按钮,不是列;事件监听必须用 table.on('tool(yourTableId)', callback),普通 click 监听拿不到 obj.data。

字段类型不一致时,比较前务必归一化

Layui 不做隐式转换,d.category === 'user' 和 d.category === 'USER' 是两回事,后端返回大小写混杂、空格、数字编码(如 1 表示 user)时,很容易漏判。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载

建议统一处理策略:

  • 在 parseData 回调中提前标准化:data.category = String(data.category).trim().toLowerCase()
  • 或在 templet 函数里用宽松比较:String(d.category).toLowerCase() === 'user'
  • 避免只写 d.category == 'user',万一后端返回 'user '(带空格)就失效

同理,布尔型字段如 is_active,别直接写 d.is_active === true,优先用 !!d.is_active 或 Boolean(d.is_active) 转换。

toolbar 模板(script type="text/html")里 if 判断写法要严格遵循 laytpl 语法

如果你选择用外部 <script type="text/html"> 定义 toolbar 模板(比如 toolbar: '#operateBar'),里面的条件语句必须用 laytpl 的双大括号语法,且括号内只能是简单表达式,不能写复杂 JS 逻辑。

正确写法:

<script type="text/html" id="operateBar">
  {{# if(d.category === 'user') { }}
    <button class="layui-btn layui-btn-xs">管理权限</button>
  {{# } else if(d.category === 'product') { }}
    <button class="layui-btn layui-btn-xs layui-btn-normal">上架</button>
  {{# } else { }}
    <button class="layui-btn layui-btn-xs layui-btn-warm">通用操作</button>
  {{# } }}
</script>

容易踩的坑:

  • 漏写 {{# }} 开头的 #,变成 {{ if(...) { }} → 模板不解析,原样输出
  • 在 {{# if(...) { }} 里写函数调用或三元运算符 → laytpl 不支持,会报错或静默失败
  • 模板 ID 写错,或未在 cols 中正确引用 toolbar: '#operateBar' → 按钮根本不出现

这种写法适合按钮结构较固定、判断逻辑简单的场景;一旦分支多或 HTML 复杂,还是推荐用函数形式 templet,可控性更强、调试更直接。

最易被忽略的一点:无论用函数还是 script 模板,所有判断依据都必须来自 d(即当前行原始数据),而不是全局变量、DOM 状态或 localStorage —— 否则翻页、搜索、reload 后极易错乱。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2583

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5603

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6610

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6278

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

883

2024.05.22

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2960

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

360

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2773

2023.11.15

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.2万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn