You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery评分脚本分页第二页异常:显示10星而非5星求助

问题分析与解决方案

首先直接回应你的疑问:没错,这大概率是因为第二页的动态加载元素没有被正确初始化raty插件,不过结合你提到的“第二页显示10星”这个特殊现象,我们还要排查下细节:

为什么会出现这个问题?

你现在的写法是给每个课程单独嵌入一段初始化脚本,页面首次加载第一页时,这些脚本能立刻找到对应的DOM元素,正常渲染5星评分。但切换到第二页时,常见的问题场景有两种:

  1. 动态加载的脚本未执行:如果你的分页是通过AJAX加载第二页HTML,浏览器通常不会自动执行新插入的<script>标签,导致第二页的评分元素根本没被raty初始化。不过这种情况应该是空白才对,你看到的10星可能是另一种情况——
  2. 重复初始化/score值错误:如果你的分页是重新渲染整个列表,却没清理之前的raty实例,或者后端在第二页返回的$r值是10(而raty默认最多显示5星,超出的话会直接拉满5星,但可能你的样式或者DOM重复导致视觉上看起来是10星)。

怎么解决?

别再给每个课程单独写脚本了,改成统一初始化的方式,既能避免分页问题,也更易维护:

步骤1:修改HTML结构

给所有评分元素加一个统一的类名,把评分值和课程ID存在data-*属性里:

<div class="ft-item">
  <div class="course-rating" data-score="<?php echo $r;?>" data-course-id="<?php echo $row->courseId;?>"></div>
</div>

步骤2:统一初始化脚本

把raty的初始化逻辑抽成一个函数,在页面加载完成后执行,分页切换后也能重复调用:

// 页面加载完成后初始化第一页评分
$(document).ready(function() {
  initCourseRatings();
});

// 封装初始化函数
function initCourseRatings() {
  $('.course-rating').raty({
    starOff : '<?php echo base_url()?>public/images/star/icon-star-2.png',
    starOn : '<?php echo base_url()?>public/images/star/icon-star-1.png',
    starHalf: '<?php echo base_url()?>public/images/star/icon-star-3.png',
    readOnly : true,
    half : true,
    // 从data属性读取当前元素的评分值,避免硬编码
    score: function() {
      return $(this).data('score');
    },
    space : true
  });
}

步骤3:分页后重新初始化

如果是AJAX分页,在新内容插入DOM后调用初始化函数:

// 举个分页按钮的例子,根据你的实际分页逻辑调整
$('.pagination-link').click(function(e) {
  e.preventDefault();
  const pageUrl = $(this).attr('href');
  
  $.get(pageUrl, function(html) {
    // 把新的课程列表替换到容器里
    $('#course-list').html(html);
    // 重新初始化第二页的评分
    initCourseRatings();
  });
});

额外排查点

  • 检查第二页的$r值:查看第二页HTML里的data-score,确认是不是在0-5之间(raty默认最大是5星),如果$r是10,raty会直接显示5星全满,可能你视觉上误以为是10星;
  • 清理旧DOM:如果分页时没有清空之前的课程列表,旧的评分元素没被移除,新的又加进来,可能会出现星星重复的情况。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:28:31