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

动态生成的CSS百分比进度条仅首个正常显示问题求助

问题解决:循环生成的进度条仅第一个生效

问题原因

HTML中ID必须唯一,你通过PHP循环生成的进度条都使用了同一个mySavingBar ID,而jQuery的$("#mySavingBar")只会匹配DOM中第一个该ID的元素,导致后续进度条无法被JS选中并设置宽度。

解决方案1:使用类选择器(推荐,更简洁)

步骤1:修改PHP循环中的进度条元素

将进度条的id属性改为class,保留data-width属性:

<div class="mySavingBar" data-width="<?php echo $life_ins_quiz_chapter_pct[$i];?>"></div>

步骤2:修改JS代码,遍历所有进度条

通过类选择器选中所有进度条,逐个设置宽度:

$(document).ready(function() {
    $(".mySavingBar").each(function() {
        const width = $(this).data('width');
        $(this).css("width", width + "%");
    });
});

解决方案2:使用带索引的唯一ID

如果你坚持使用ID,可以给每个进度条生成唯一ID,再遍历处理:

步骤1:修改PHP循环中的进度条ID

给ID添加循环索引后缀:

<div id="mySavingBar_<?php echo $i;?>" data-width="<?php echo $life_ins_quiz_chapter_pct[$i];?>"></div>

步骤2:修改JS代码,遍历所有带索引的ID

$(document).ready(function() {
    // 获取章节数量,和PHP循环的count对应
    const chapterCount = <?php echo count($life_ins_quiz_chapter_num);?>;
    for(let i = 0; i < chapterCount; i++){
        const barId = "#mySavingBar_" + i;
        const width = $(barId).data('width');
        $(barId).css("width", width + "%");
    }
});

补充说明

  • 两种方案都能解决问题,类选择器的方式更简洁,不需要维护索引关联,推荐使用。
  • 确认data-width返回的整数数据正常,你已经验证过这一点,所以无需额外处理数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:30