Я использую виджет звездного рейтинга в одной из моих HTML-форм в своем приложении React JS.Я имею в виду этот виджет https://www.everythingfrontend.com/posts/star-rating-input-pure-css.html. Когда пользователь щелкает рейтинг одной из пяти звезд, информация о пользователе сохраняется на сервере.
Звезды остаются выбранными, когда пользователь нажимает на любую звезду.Я хочу сбросить звездочки обратно на невыбранные, когда ответ возвращается с сервера для следующего действия пользователя.
Я не знаю, как это сделать с помощью Typescript / Javascript.Я попытался изменить его, как показано ниже:
let ratingElement = document.querySelectorAll("#ratingField > label");
if (ratingElement.length > 0) {
for (let i = 0; i < ratingElement.length; i++) {
ratingElement[i].style.color = "#ddd";
}
}
Используя приведенный выше код, цвет сбрасывается.Но в CSS есть и другие свойства, такие как hover
, checked
, unchecked
в виджете.Как добавить эти свойства для сброса звездочек так же, как на начальном этапе?
Ниже приведен мой CSS для виджета:
.rating {
border: none;
float: left;
}
.rating > input {
display: none;
}
.rating > label:before {
margin: 5px;
font-size: 25px;
font-family: FontAwesome;
display: inline-block;
content: "\f005";
}
.rating > label {
color: #ddd;
float: right;
}
.rating > input:checked ~ label, /* show gold star when clicked */
.rating:not(:checked) > label:hover, /* hover current star */
.rating:not(:checked) > label:hover ~ label {
color: #ffd700;
} /* hover previous stars in list */
.rating > input:checked + label:hover, /* hover current star when changing rating */
.rating > input:checked ~ label:hover,
.rating > label:hover ~ input:checked ~ label, /* lighten current selection */
.rating > input:checked ~ label:hover ~ label {
color: #ffed85;
}
А мой HTML-код выглядит так:
<fieldset
className="rating"
style={{ marginLeft: 5, marginRight: 5 }}
id="ratingField"
>
<input type="radio" id="star5" name="rating" value="5" />
<label
onClick={() => this.shortlist(5)}
className="full"
htmlFor="star5"
title="Awesome"
/>
<input type="radio" id="star4" name="rating" value="4" />
<label
onClick={() => this.shortlist(4)}
className="full"
htmlFor="star4"
title="Pretty good"
/>
<input type="radio" id="star3" name="rating" value="3" />
<label
onClick={() => this.shortlist(3)}
className="full"
htmlFor="star3"
title="Average"
/>
<input type="radio" id="star2" name="rating" value="2" />
<label
onClick={() => this.shortlist(2)}
className="full"
htmlFor="star2"
title="Kinda bad"
/>
<input type="radio" id="star1" name="rating" value="1" />
<label
onClick={() => this.shortlist(1)}
className="full"
htmlFor="star1"
title="Worst"
/>
</fieldset>
Может кто-нибудь помочь?