我有一个多页表单,在其中一个页面上有一个星评应用程序,用户可以在 1 到 5 星之间进行投票。我让它工作得很好,但是在同一个页面上我需要多次(即要审查的不同内容)。
我已经尝试了很多东西;更改“星级”和“星级”的类别,但两者都不允许多个评级 - 它们都会触发回到第一个(即,如果您在第二个上选择 2 星,它也会默认第一个选择为 2 星,或者只选择第一个首选2星)。有什么想法吗?
HTML代码:
<div class="stars">
<input type="radio" name="star" class="star-1" id="star-1" />
<label class="star-1" for="star-1">1</label>
<input type="radio" name="star" class="star-2" id="star-2" />
<label class="star-2" for="star-2">2</label>
<input type="radio" name="star" class="star-3" id="star-3" />
<label class="star-3" for="star-3">3</label>
<input type="radio" name="star" class="star-4" id="star-4" />
<label class="star-4" for="star-4">4</label>
<input type="radio" name="star" class="star-5" id="star-5" />
<label class="star-5" for="star-5">5</label>
<span></span>
</div>
CSS:
form .stars {
background: url("stars.png") repeat-x 0 0;
width: 150px;
margin: 0 auto;
}
form .stars input[type="radio"] {
position: absolute;
opacity: 0;
filter: alpha(opacity=0);
}
form .stars input[type="radio"].star-5:checked ~ span {
width: 100%;
}
form .stars input[type="radio"].star-4:checked ~ span {
width: 80%;
}
form .stars input[type="radio"].star-3:checked ~ span {
width: 60%;
}
form .stars input[type="radio"].star-2:checked ~ span {
width: 40%;
}
form .stars input[type="radio"].star-1:checked ~ span {
width: 20%;
}
form .stars label {
display: block;
width: 30px;
height: 30px;
margin: 0!important;
padding: 0!important;
text-indent: -999em;
float: left;
position: relative;
z-index: 10;
background: transparent!important;
cursor: pointer;
}
form .stars label:hover ~ span {
background-position: 0 -30px;
}
form .stars label.star-5:hover ~ span {
width: 100% !important;
}
form .stars label.star-4:hover ~ span {
width: 80% !important;
}
form .stars label.star-3:hover ~ span {
width: 60% !important;
}
form .stars label.star-2:hover ~ span {
width: 40% !important;
}
form .stars label.star-1:hover ~ span {
width: 20% !important;
}
form .stars span {
display: block;
width: 0;
position: relative;
top: 0;
left: 0;
height: 30px;
background: url("stars.png") repeat-x 0 -60px;
-webkit-transition: -webkit-width 0.5s;
-moz-transition: -moz-width 0.5s;
-ms-transition: -ms-width 0.5s;
-o-transition: -o-width 0.5s;
transition: width 0.5s;
}
最佳答案
我通过更改 radio 名称并保持 ID 唯一来使其正常工作。
单选按钮按名称分组,因此每个按钮代表特定形式“变量”的值。每组星星代表一个不同的变量,一个产品的评级,每个组都应该有一个单独的名称来反射(reflect)它们所代表的产品,例如附加产品 ID,name="star-123456"
。您还可以在表单的元素列表中附加产品索引。
ID 在元素之间应该始终是唯一的。在这种情况下, radio 输入 ID 应该是唯一的,以便标签的 for 属性指向正确的。
下面的代码片段包含两个 radio 组的唯一名称和每个 radio 输入的唯一 ID。
form .stars {
background: gray;
width: 150px;
margin: 0 auto;
}
form .stars input[type="radio"] {
position: absolute;
opacity: 0;
filter: alpha(opacity=0);
}
form .stars input[type="radio"].star-5:checked ~ span {
width: 100%;
}
form .stars input[type="radio"].star-4:checked ~ span {
width: 80%;
}
form .stars input[type="radio"].star-3:checked ~ span {
width: 60%;
}
form .stars input[type="radio"].star-2:checked ~ span {
width: 40%;
}
form .stars input[type="radio"].star-1:checked ~ span {
width: 20%;
}
form .stars label {
display: block;
width: 28px;
height: 28px;
border: 1px solid black;
margin: 0!important;
padding: 0!important;
text-indent: -999em;
float: left;
position: relative;
z-index: 10;
background: transparent!important;
cursor: pointer;
}
form .stars label:hover ~ span {
background-position: 0 -30px;
}
form .stars label.star-5:hover ~ span {
width: 100% !important;
}
form .stars label.star-4:hover ~ span {
width: 80% !important;
}
form .stars label.star-3:hover ~ span {
width: 60% !important;
}
form .stars label.star-2:hover ~ span {
width: 40% !important;
}
form .stars label.star-1:hover ~ span {
width: 20% !important;
}
form .stars span {
display: block;
width: 0;
position: relative;
top: 0;
left: 0;
height: 30px;
background: red;
filter: alpha(opacity=0);
-webkit-transition: -webkit-width 0.5s;
-moz-transition: -moz-width 0.5s;
-ms-transition: -ms-width 0.5s;
-o-transition: -o-width 0.5s;
transition: width 0.5s;
}
<form>
<div class="stars">
<input type="radio" name="star_a" class="star-1" id="star_a-1" />
<label class="star-1" for="star_a-1">1</label>
<input type="radio" name="star_a" class="star-2" id="star_a-2" />
<label class="star-2" for="star_a-2">2</label>
<input type="radio" name="star_a" class="star-3" id="star_a-3" />
<label class="star-3" for="star_a-3">3</label>
<input type="radio" name="star_a" class="star-4" id="star_a-4" />
<label class="star-4" for="star_a-4">4</label>
<input type="radio" name="star_a" class="star-5" id="star_a-5" />
<label class="star-5" for="star_a-5">5</label>
<span></span>
</div>
<div class="stars">
<input type="radio" name="star_b" class="star-1" id="star_b-1" />
<label class="star-1" for="star_b-1">1</label>
<input type="radio" name="star_b" class="star-2" id="star_b-2" />
<label class="star-2" for="star_b-2">2</label>
<input type="radio" name="star_b" class="star-3" id="star_b-3" />
<label class="star-3" for="star_b-3">3</label>
<input type="radio" name="star_b" class="star-4" id="star_b-4" />
<label class="star-4" for="star_b-4">4</label>
<input type="radio" name="star_b" class="star-5" id="star_b-5" />
<label class="star-5" for="star_b-5">5</label>
<span></span>
</div>
</form>
关于php - 同一页面上的多星评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991572/