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

基于JavaScript的随机星级评分系统重置问题求助

解决随机星级评分的重置问题

嘿,这个问题很好解决!你现在的代码每次点击按钮时,只会给指定数量的星星设置黄色,但没有把之前已经变黄的星星重置回灰色,所以第二次点击时旧的黄色星星会保留下来,就出现了星级叠加的问题。

只需要在starsNote函数里,生成随机星级之前,先把所有星星的颜色重置为初始的灰色就可以了。

修改后的JavaScript代码

let starsContainer = document.querySelector('.stars')
starsContainer.style.color = "gray"

function starsNote (){
    let star1 = document.getElementById('first-star')
    let star2 = document.getElementById('second-star')
    let star3 = document.getElementById('third-star')
    let star4 = document.getElementById('fourth-star')
    let star5 = document.getElementById('last-star')
    let starArray = [star1, star2, star3, star4, star5]

    // 新增:先重置所有星星为灰色
    starArray.forEach(star => {
        star.style.color = "gray"
    })

    // 生成1-5的随机数
    randomStarNumber = Math.ceil(Math.random() * 5)
    // 给对应数量的星星设置黄色
    for (let i = 0; i < randomStarNumber; i++){
        starArray[i].style.color = "#FFB703"
    }
}

document.getElementById('btn').addEventListener('click', () => {
    starsNote()
})

核心修改说明

  • 我添加了starArray.forEach(star => { star.style.color = "gray" })这行代码,它会遍历所有星星元素,把它们的颜色先重置为灰色。
  • 这样每次点击按钮时,都会先清空之前的星级状态,再生成新的随机星级,就不会有旧星星保留颜色的问题了。

额外优化建议

你还可以简化代码,不用逐个获取星星元素,直接通过容器批量获取所有星星,让代码更简洁易维护:

let starsContainer = document.querySelector('.stars')
starsContainer.style.color = "gray"
// 一次性获取所有星星元素
const starArray = starsContainer.querySelectorAll('i')

function starsNote (){
    // 重置所有星星为灰色
    starArray.forEach(star => {
        star.style.color = "gray"
    })

    // 生成随机星级数量
    const randomStarNumber = Math.ceil(Math.random() * 5)
    // 设置对应数量的星星为黄色
    for (let i = 0; i < randomStarNumber; i++){
        starArray[i].style.color = "#FFB703"
    }
}

document.getElementById('btn').addEventListener('click', starsNote)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:42:44