HTML 和 javascript 的星级评定顺序不正确

Star rating with html and javascript is not working in the right order

提问人:Kristijan Pehar 提问时间:3/30/2023 最后编辑:DarkBeeKristijan Pehar 更新时间:3/30/2023 访问量:88

问:

我尝试使用 HTML 和 JavaScript 创建星级评定系统,但它无法正常运行。

它不是从左到右工作,而是以相反的方向工作 - 从右到左。例如,如果我点击第四颗星星,它将从右到左而不是从左到右着色四颗星星,这样第一颗星星就会保持无色状态。

任何人都可以就如何纠正此问题提出建议吗?

function fillStars(num) {
  for (var i = 1; i <= 5; i++) {
    var star = document.getElementById('star' + i.toString());
    if (i <= num) {
      star.checked = true;
    } else {
      star.checked = false;
    }
  }
}
.rating {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
}

.rating input[type="radio"] {
  display: none;
}

.rating label {
  font-size: 60px;
  margin-right: 10px;
  cursor: pointer;
}

.rating label::before {
  content: "\2606";
  display: inline-block;
  width: 1.1em;
  text-align: center;
}

.rating label.checked::before {
  content: "\2605";
  color: gold;
}

.rating label.checked~label::before {
  content: "\2605";
  color: gold;
}

.rating input[type="radio"]:checked {
  content: "\2605";
  color: gold;
}

.rating input[type="radio"]:checked~label::before {
  content: "\2605";
  color: gold;
}
<div class="form-name">
  <fieldset class="rating">
    <legend>Bewertung:</legend>
    <input type="radio" id="star1" name="rating" value="1" onclick="fillStars(1)" />
    <label for="star1" title="1 Stern"></label>
    <input type="radio" id="star2" name="rating" value="2" onclick="fillStars(2)" />
    <label for="star2" title="2 Sterne"></label>
    <input type="radio" id="star3" name="rating" value="3" onclick="fillStars(3)" />
    <label for="star3" title="3 Sterne"></label>
    <input type="radio" id="star4" name="rating" value="4" onclick="fillStars(4)" />
    <label for="star4" title="4 Sterne"></label>
    <input type="radio" id="star5" name="rating" value="5" onclick="fillStars(5)" />
    <label for="star5" title="5 Sterne"></label>
  </fieldset>
</div>

JavaScript HTML 评级

评论

0赞 CBroe 3/30/2023
在任何给定时间,只能从单选按钮组中选择一个单选按钮。
0赞 Community 3/30/2023
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。
0赞 CBroe 3/30/2023
“如果我点击第四颗星,它会从右到左而不是从左到右给四颗星着色”——这实际上并不是你所展示的代码所发生的事情——jsfiddle.net/q318ramf
0赞 Kristijan Pehar 3/30/2023
@CBroe 对不起,我忘了分享我的css。我在上面编辑它
1赞 CBroe 3/30/2023
因此,要使它正常工作,您需要 a) 更改 HTML 中单选按钮的顺序 - 需要从 5 开始,一直到 1;b) 通过在容器上使用,再次颠倒视觉顺序。flex-direction: row-reverse;

答:

0赞 Hitesh Padhara 3/30/2023 #1

请替换css中的以下代码:

.rating {
  display: flex;
  flex-direction: row-reverse;
  justify-content: center;
  align-items: center;
}

希望这能解决您的问题。

0赞 Robo Robok 3/30/2023 #2

首先,你的循环没有多大意义,因为只能检查组中的一个元素。您可以完全删除此代码段。标签足以使正确的无线电元素可点击。forradio

然后,您需要考虑 CSS。您希望将选中的无线电元素之后的所有内容都设置为空星形,因此输入需要在星形之后进行。