这是一个非常精简的版本,可以直观地显示我想做的事情。
我的HTML
<p class="call">Please select a number.</p>
<div class="button-flex">
<button class="rating">1</button>
<button class="rating">2</button>
<button class="rating">3</button>
<button class="rating">4</button>
<button class="rating">5</button>
</div>
我的JS
let allBtns = document.querySelectorAll(".rating");
allBtns.forEach((option) => {
option.addEventListener("click", function () {
option.style.backgroundColor = "orange";
});
});
本质上,我希望用户只能点击一个评级(1到5(,该评级最终将用于更新字符串。
我现在想解决的主要问题是能够选择一个值,选择另一个值并取消选择以前选择的值。我找到了一种使用单选框的方法,复选框也可以,但我也想保持按钮的样式,因为它应该是这样显示的。
这在普通按钮元件中可能吗?
let allBtns = document.querySelectorAll(".rating");
allBtns.forEach((option) => {
option.addEventListener("click", function (event) {
allBtns.forEach(el => {
el.classList.remove('active');
});
event.currentTarget.classList.add('active');
});
});
.rating.active {
background-color: orange;
}
<p class="call">Please select a number.</p>
<div class="button-flex">
<button role="radio" class="rating">1</button>
<button role="radio" class="rating">2</button>
<button role="radio" class="rating">3</button>
<button role="radio" class="rating">4</button>
<button role="radio" class="rating">5</button>
</div>
用.active 标识当前选择的按钮元素
选择按钮后,从所有按钮元素中删除.active,并将.active插入新选择的按钮中。
您应该记住最后一个按钮,然后在下次单击时将其更改回,如下所示:
let allBtns = document.querySelectorAll(".rating");
let lastBtn;
allBtns.forEach((option) => {
option.addEventListener("click", function () {
lastBtn && (lastBtn.style.backgroundColor = null);
(lastBtn = option).style.backgroundColor = "orange";
});
});
<p class="call">Please select a number.</p>
<div class="button-flex">
<button class="rating">1</button>
<button class="rating">2</button>
<button class="rating">3</button>
<button class="rating">4</button>
<button class="rating">5</button>
</div>