layui.rate启用半星必须显式设置half: true,否则点击仅取整数;value需为0.5倍数的数字类型,字符串或非0.5倍数会导致显示异常;表格中需在done回调销毁并重建实例以防事件失效。

layui.rate 设置半星必须显式传 half: true
默认不开启半星,哪怕用户鼠标悬停在星星中间、UI 显示了半颗效果,点击后仍只取整数(如点 3.5 位置,value 仍是 4)。只有加了 half: true,组件内部才启用 0.5 步长逻辑。
-
half: true后,用户点击星星左侧或右侧区域会分别触发3.5或4.5这类值,change回调里拿到的就是浮点数 - 若同时设了
text: true和setText回调,注意value参数可能是3.5,别直接当整数用arr[value]去查字典,容易越界或返回undefined - 服务端接收时也要确认是否支持小数——比如 MySQL 的
INT字段存不了3.5,得用DECIMAL(2,1)
半星状态下 value 初始值必须是 0.5 的整数倍
初始化时传 value: 3.5 没问题,但传 value: "3.5"(字符串)或 value: 3.7(非 0.5 倍数)会导致初始显示异常:可能全空、只亮 3 颗,或亮 4 颗但回调始终返回 4。
- 后端吐数据时,确保 JSON 中的评分字段是数字类型,不是字符串;Layui 不做隐式转换
- 如果数据库存的是整数(如 35 表示 3.5 星),前端要手动除以 10 再传给
value - 表格中动态渲染时,
lay-value="{{d.score}}"若d.score是字符串,得先在 done 回调里转成数字:Number(d.score)
表格中用 layui.rate 半星,DOM 重建后容易丢实例
表格分页、排序、搜索后 DOM 重绘,原先的 rate 实例不会自动更新,change 事件可能绑定到旧节点,或者根本没绑定上——表现为点击没反应、始终返回旧值、甚至报 Cannot read property 'value' of null。
- 每次
done回调里,先销毁再重建:layui.rate.remove('.layui-rate');,再layui.rate.render({...}) - 不要在
templet里写内联 JS(如onclick="..."),Layui 会过滤掉 script 标签,且破坏组件生命周期 - 如果只读展示(如后台列表),建议统一用
readonly: true+half: true,避免重复初始化带来的事件堆积
half: true,却怎么也点不出半星。











