php - 同一页面上的多星评论

标签 php html css forms

我有一个多页表单,在其中一个页面上有一个星评应用程序,用户可以在 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/

相关文章:

php - 遍历我的整个 $_SESSION 数组并删除空变量

php - 解析 PHP 问题 - fopen() 对于 CSV 文件无法正常工作

javascript - 将多个形状绘制为一个

html - 使用 CSS3 和 HTML5 向下滑动菜单栏

html - 无法将div移动到底部

php - Laravel 5.1 干扰本地服务器上的虚拟主机

php - 无法更改模型构建器选项

html - 如何在 css 中将三 Angular 形移动到屏幕的中央右侧?

javascript - Fancybox 放大同一张图片 onclick

css - 图像顶部的中心 ionic 图标