3 回答

TA贡献1921条经验 获得超9个赞
有很多方法可以做到这一点,但一个简单的方法是:
创建一个 JS 函数,该函数将元素作为选项并使用它来构建 id(假设您保持一致的命名约定):
function isChecked(e) {
if (e.checked) {
document.getElementById(e.value + '-image').style.visibility = "visible";
} else {
document.getElementById(e.value + '-image').style.visibility = "hidden";
}
}
然后在您的 HTML 中,onclick为每个元素添加一个:
<input type="checkbox" value="pepperoni" id="pepperoniCheckbox" onclick="isChecked(this);"/>

TA贡献2016条经验 获得超9个赞
回答
您可以将所谓的事件委托与Element.prototype.matches和event.target一起使用。
工作示例:
(注意:我从父 div 中删除了填充以更好地适应演示)
const parent = document.querySelector(".ingredients-boxes");
parent.addEventListener("click", function(event) {
const element = event.target;
if(element.matches("input[type='checkbox']")) {
const image = document.querySelector("#" + element.value + "-image");
if (element.checked) {
image.style.visibility = "visible";
} else {
image.style.visibility = "hidden";
}
}
});
<div class="ingredients-boxes">
<input type="checkbox" value="pepperoni" id="pepperoniCheckbox" />
<label for="pepperoni"> Pepperoni </label>
<input type="checkbox" value="olives" id="olivesCheckbox" />
<label for="olives"> Olives </label>
</div>
<main>
<div class="pizza-holder">
<img class="pizza" src="pizza-hut-crust-pan-pizza-food-delivery-pizza.jpg" />
<img class="pizza pepperoni" id="pepperoni-image" src="pepperoni-transparent.png" />
<img class="pizza olives" id="olives-image" src="pepperoni-transparent.png" />
</div>
</main>

TA贡献1796条经验 获得超4个赞
解释:
事件委托将事件侦听器添加到父元素。
此事件侦听器监视事件。当事件发生时,它会检查哪些子元素导致了该事件。
活动元素在 中可用event.target。
parent.addEventListener(function(event) {
const element = event.target;
});
我们可以使用Element.prototypematches的方法检查该元素是否是我们正在寻找的元素
例如,在您的情况下,我们正在寻找checkboxes。
parent.addEventListener(function(event) {
const element = event.target;
if(element.matches("input[type='checkbox']")) {
// do something
}
});
使用事件委托时的重要一点是,您要为想要操作的项目保持相同的命名约定。
在您的情况下,图像的ID始终是element.value + "-image"
visibility因此,我们可以在事件监听器中查找元素并调整它。
const image = document.querySelector("#" + element.value + "-image");
if (element.checked) {
image.style.visibility = "visible";
} else {
image.style.visibility = "hidden";
}
}
完整代码:
const parent = document.querySelector(".ingredients-boxes");
parent.addEventListener("click", function(event) {
const element = event.target;
if(element.matches("input[type='checkbox']")) {
const image = document.querySelector("#" + element.value + "-image");
if (element.checked) {
image.style.visibility = "visible";
} else {
image.style.visibility = "hidden";
}
}
});
建议:
给你所有的顶级图像一个类,以便它们加载hidden。
缓存图像元素,这样您就不必每次单击复选框时都搜索 DOM。
顶级课程 - 最初隐藏的示例:
const parent = document.querySelector(".ingredients-boxes");
parent.addEventListener("click", function(event) {
const element = event.target;
if(element.matches("input[type='checkbox']")) {
const image = document.querySelector("#" + element.value + "-image");
if (element.checked) {
image.style.visibility = "visible";
} else {
image.style.visibility = "hidden";
}
}
});
.topping {
visibility: hidden;
}
<div class="ingredients-boxes">
<input type="checkbox" value="pepperoni" id="pepperoniCheckbox" />
<label for="pepperoni"> Pepperoni </label>
<input type="checkbox" value="olives" id="olivesCheckbox" />
<label for="olives"> Olives </label>
</div>
<main>
<div class="pizza-holder">
<img class="pizza" src="pizza-hut-crust-pan-pizza-food-delivery-pizza.jpg" />
<img class="pizza pepperoni topping" id="pepperoni-image" src="pepperoni-transparent.png" />
<img class="pizza olives topping" id="olives-image" src="pepperoni-transparent.png" />
</div>
</main>
缓存示例:
const parent = document.querySelector(".ingredients-boxes");
parent.addEventListener("click", function(event) {
if(!this.cache) {
this.cache = {};
}
const element = event.target;
if(element.matches("input[type='checkbox']")) {
const topping = element.value;
let image = this.cache[topping];
if(!image) {
image =
this.cache[topping] =
document.querySelector("#" + element.value + "-image");
}
if (element.checked) {
image.style.visibility = "visible";
} else {
image.style.visibility = "hidden";
}
}
});
.topping {
visibility: hidden;
}
<div class="ingredients-boxes">
<input type="checkbox" value="pepperoni" id="pepperoniCheckbox" />
<label for="pepperoni"> Pepperoni </label>
<input type="checkbox" value="olives" id="olivesCheckbox" />
<label for="olives"> Olives </label>
</div>
<main>
<div class="pizza-holder">
<img class="pizza" src="pizza-hut-crust-pan-pizza-food-delivery-pizza.jpg" />
<img class="pizza pepperoni topping" id="pepperoni-image" src="pepperoni-transparent.png" />
<img class="pizza olives topping" id="olives-image" src="pepperoni-transparent.png" />
</div>
</main>
添加回答
举报