rate组件只读必须设readonly: true,禁用DOM或CSS无效;动态切换需二次render();readonly与text: true搭配才显示分数;表单提交需手动同步hidden input值。
只读模式必须设 readonly: true,不是隐藏或禁用 DOM
直接给容器加 disabled 或用 css 隐藏交互区域完全无效——rate 组件的只读行为由内部逻辑控制,只认 readonly 这个布尔配置项。设为 true 后,鼠标悬停无高亮、点击无响应、键盘也无法聚焦,但星星样式和文本照常渲染,视觉上仍是完整评分态。
常见错误是试图用 elem.setAttribute('disabled', 'true') 或 jQuery 的 .prop('disabled', true),这些对 rate 实例毫无作用,组件压根不监听原生 disabled 属性。
动态切换只读状态要重新 render(),不能只改参数
rate.set() 只能改值,不能改 readonly 状态;想让已渲染的评分组件“点完变只读”,必须调用第二次 rate.render(),把整个实例重绘一遍。
- 首次渲染时不要设
readonly: true,否则用户根本点不了 - 在
choose回调里触发第二次render,传入新配置(含readonly: true)和当前分值 - 注意两次渲染的
elem必须一致,否则会创建新实例,旧实例残留内存中
示例:
rate.render({ elem: '#score', choose: function(value) { rate.render({ elem: '#score', value: value, readonly: true, text: true }); }});
readonly 和 text 搭配使用才真正“可读”
单独设 readonly: true 时,组件只显示星星,不带数字或文字说明,用户无法直观知道当前是多少分。加上 text: true 才会在右侧显示类似“4星”或“3.5星”的提示。
如果后端返回的是小数(如 value: 4.2),要注意:
– 关闭 half: true 时,text 显示的会是取整后的整数(4)
– 开启 half: true 时,text 才会如实显示 4.2(但 UI 上仍只高亮 4 颗星,半星逻辑不生效)
所以只读场景下,建议统一开启 half: true,避免数值显示与 UI 不一致。
表单提交时别漏掉 hidden input 同步值
rate 组件本身不生成 <input type="hidden">,只读模式下更不会自动绑定表单字段。如果这个评分要随表单提交,必须手动加一个隐藏域,并在 render 后或 choose 时更新它的 value:
<div id="score"></div><br><input type="hidden" name="score" id="score-value" value="0">
然后在 choose 或二次 render 后同步:
document.getElementById('score-value').value = value;否则只读渲染完,后端收不到任何分数。
最容易被忽略的是:只读模式下组件不再触发 change 事件,所以不能靠监听它来更新 hidden input——所有值同步动作必须显式写在 choose 或 render 完成后的回调里。


















