Layui表格toolbar中直接写不显示,必须用lay-template模板语法配合定义并引用;图标不显示主因是filter不匹配、字体加载失败或误混行工具栏事件。
toolbar 里直接写 不显示?必须用模板语法
默认 toolbar 配置只认内置图标名(如 refresh、add),你直接在字符串里写 <i class="layui-icon"></i>,layui 会当纯文本渲染,不解析 html —— 这是新手卡住最多的地方。
解决方法只有一个:用 lay-template 模板语法,配合 script type="text/html" 定义结构。Layui 在渲染时才会真正编译这段 HTML,图标才能正常显示。
- 模板必须写成:
<script type="text/html" id="myToolbar"><button class="layui-btn" lay-event="export"><i class="layui-icon"> 导出</script> - 表格配置中引用它:
toolbar: '#myToolbar'(注意开头的#) - ID 名(
myToolbar)必须和script标签的id完全一致,大小写敏感,多一个短横线或空格都不行
点击没反应?检查 filter、lay-event、table.on 三者是否对齐
按钮渲染出来了,但点下去静默失败,大概率是这三个值没对上:
- 表格初始化时的
lay-filter="userTable"(写在<table> 标签上) <li>监听代码里的 <code>table.on('toolbar(userTable)', ...)(括号里必须严格匹配) - 按钮上的
lay-event="export"(这个值会在obj.event中拿到) -
table.checkStatus('userTable').data→ 返回选中行数组 -
table.cache['userTable']→ 返回当前页全部缓存数据(非实时 DOM) - 项目目录结构变了,
layui/css/layui.css里写的字体路径(如url("../font/iconfont.eot"))失效 - 用了 CDN 引入 layui,但本地又覆盖了 css 路径,导致字体请求错位
- 某些构建工具(如 vite)会拦截 font 请求,需额外配置
public目录或 alias
漏掉任一环,事件就永远不会触发。特别注意:lay-event 值不能含空格或特殊字符(比如 lay-event="export csv" 是非法的),只能是合法 JS 标识符。
想在按钮里传参或响应选中行数据?别依赖 this,得主动查
toolbar 按钮是表格级操作,不绑定任何行上下文。点击后拿不到当前行数据,this 指向的是按钮 DOM,不是表格实例。
要获取选中行,必须手动调用:
如果操作目标是“某一行”,那这个按钮就不该放 toolbar,而该放进列配置的 toolbar: '#rowBar' 里——那里监听的是 tool(filter),回调参数 obj.data 才是当前行完整数据。
图标字体加载失败导致按钮空白?优先查 Network 面板
按钮能点、有 hover 效果,但图标位置空着,大概率是 layui.css 里引用的 iconfont 文件没加载成功。
打开浏览器开发者工具,切到 Network 面板,过滤 icon 或 font,看是否有 404 请求。常见原因:
临时验证方式:在控制台执行 getComputedStyle(document.querySelector('.layui-icon')).content,看返回值是不是 Unicode 字符(如 "\e609")。如果不是,说明字体类没生效,得先修样式链路。











