JSFiddle - React, Tailwind, and code Playground

by Cone

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css">
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Оценка деятельности центра</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        .star-rating {
            font-size: 2rem;
            color: #ddd;
            cursor: pointer;
        }
        .star-rating .filled {
            color: #f39c12;
        }
    </style>
</head>
<body>
    <div class="container text-center mt-5">
        <h3>Оцените нашу деятельность</h3>
        <div class="star-rating mt-3">
           <i class="fa-solid fa-star" data-rating="1"></i>
           <i class="fa-solid fa-star" data-rating="2"></i>
           <i class="fa-solid fa-star" data-rating="3"></i>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.js"></script>
</body>
</html>

JavaScript

document.querySelectorAll('.star-rating i').forEach(star => {
            star.addEventListener('click', function() {
                const rating = this.getAttribute('data-rating');
                console.log(rating);

                // Обновляем стиль звезд на основе выбранной оценки
                document.querySelectorAll('.star-rating i').forEach(star => {
                    star.classList.remove('filled');
                });
                for (let i = 0; i < rating; i++) {
                    document.querySelectorAll('.star-rating i')[i].classList.add('filled');
                }
            });
        });