Я не уверен, что идет не так, но, глядя на ваш код, я бы предложил некоторые изменения. Вам следует избегать дублирования функций (например, firstRating (), secondRating () ...) -> что делать, если на вашей странице было 30 разных оценок? Кроме того, ваш HTML сложно построить (id = ratee1, ratee2 ....) - что если у вас было 7 звезд на 30 различных рейтингов? Можете ли вы использовать это на другой странице / проекте?
Попробуйте создать шаблон HTML для того, что вам нужно повторить на своей странице, затем создайте функцию, которая использует этот шаблон для генерации чего-либо.
Вот пример:
function initStarRating() {
var attrName = "starRating",
list = document.querySelectorAll('input[' + attrName + ']');
var buildStarGroup = function(el) {
var parent = el.parentNode,
class_0 = el.getAttribute("class-0"),
class_1 = el.getAttribute("class-1"),
num_stars = el.getAttribute("num-stars");
el.type = "hidden";
el.name = el.getAttribute(attrName);
el.removeAttribute(attrName);
parent.stars = [];
for (let j = 1; j <= num_stars; j++) {
let input = document.createElement("i");
input.className = j <= el.value ? class_1 : class_0;
input.value = j;
parent.appendChild(input);
parent.stars.push(input);
}
parent.onclick = function(e) {
if (parent.stars.indexOf(e.target) < 0)
return;
el.value = e.target.value;
for (let i = 0; i < parent.stars.length; i++)
if (i < el.value)
parent.stars[i].className = class_1;
else
parent.stars[i].className = class_0;
}
}
for (let i = 0; i < list.length; i++) {
buildStarGroup(list[i]);
}
}
/** initialize stars **/
initStarRating();
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="form-group">
<label class="col-lg-5 col-md-4 control-label" for="firstRating">Experience</label>
<div class="rating col-lg-7" style="float: right">
<input starRating="rating_1" num-stars="5" value="1" class-0="fa fa-star-o" class-1="fa fa-star" />
</div>
</div>
<div class="form-group">
<label class="col-lg-5 col-md-4 control-label" for="secondRating">Speed</label>
<div class="rating col-lg-7" style="float: right">
<input starRating="rating_2" num-stars="5" value="3" class-0="fa fa-star-o" class-1="fa fa-star" />
</div>
</div>
Я уверен, что этот код можно улучшить, но он работает и должен дать вам возможность начать создавать свои собственные шаблоны. Ура! * * 1013