解決したいこと
HTML,CSS,JavaScriptを用いて星マークと連動したレビュー機能を作りたいと考えています。
星マークの動作の部分で、クリックした星マークとその左の星マークを塗りつぶした星にして、右側の星マークを中身が空白の星マークにしたいのですが、以下に掲載するプログラムを実行したところ、全く逆の現象が起きています。(クリックした星マークとその右側の星マークが塗りつぶされてしまう)
どのように解決したらいいでしょうか。
※記載はしていないですが、JQueryは読み込んでいます。
該当するソースコード
HTML
1<div class="star-rating"> 2 <input type="radio" name="rating" value="1" id="star1"> 3 <label for="star1"></label> 4 <input type="radio" name="rating" value="2" id="star2"> 5 <label for="star2"></label> 6 <input type="radio" name="rating" value="3" id="star3"> 7 <label for="star3"></label> 8 <input type="radio" name="rating" value="4" id="star4"> 9 <label for="star4"></label> 10 <input type="radio" name="rating" value="5" id="star5"> 11 <label for="star5"></label> 12</div>
CSS
1/* star rating */ 2.star-rating { 3 width: 100%; 4 display: flex; 5 justify-content: center; 6 align-items: center; 7 margin-bottom: 20px; 8 font-size: 1.3rem; 9} 10 11.star-rating input { 12 display: none; 13} 14 15.star-rating label { 16 display: inline-block; 17 width: 50px; 18 height: 50px; 19 margin: 0 5px 0 0; 20 background: url(../img/icon/no\ fill\ star.png) 0 0 no-repeat; 21 background-size: contain; 22 cursor: pointer; 23} 24 25.star-rating label:hover, 26.star-rating label:hover ~ label, 27.star-rating input:checked ~ label { 28 background: url(../img/icon/fill\ star.png) 0 0 no-repeat; 29 background-size: contain; 30} 31
javascript
1<script> 2 $('.star-rating input').click(function(){ 3 $('.star-rating input').removeClass('checked'); 4 $(this).addClass('checked'); 5 var starNum = $(this).val(); 6 $('.star-rating label').removeClass('full'); 7 for(var i=1; i<=starNum; i++){ 8 $('.star-rating label:nth-child('+i+')').addClass('full'); 9 } 10 }); 11</script>

回答2件
あなたの回答
tips
プレビュー