javascript - 如何使用多个按钮切换可见性?
问题描述
可以说我有几个切换按钮。切换 1 和 2 将切换 div 的可见性,只要其中一个或两个按钮处于活动状态,就会出现 div。
切换和 div 是从 db 记录动态创建的。所以会有一些例子,我们有 3 个切换和 2 个 div。例如:
toggle1 和 toggle2 激活 div1
toggle2 和 toggle3 激活 div2
我相当肯定这是一个 JS 问题,但如果它可以在没有 JS 的情况下解决,那么我会很高兴。
解决方案
编辑以匹配新要求。
您可以使用“跟随兄弟”选择器来检查按钮是否跟随选中的复选框。
button {
display: none;
}
.btn1:checked ~ #btn1,
.btn2:checked ~ #btn2 {
display: block;
}
<input type="checkbox" class="btn1">
<input type="checkbox" class="btn1 btn2">
<input type="checkbox" class="btn2">
<button id="btn1">btn1</button>
<button id="btn2">btn2</button>
这对 HTML 结构非常敏感。如果复选框和按钮是同级的,这很容易,但如果有不同的级别,就会变得更难,或者不可能。JavaScript 解决方案不太关心结构:
const buttons = Array.from(document.querySelectorAll('button'));
Array.from(document.querySelectorAll('input[type="checkbox"]'));
function setButton(button, visible) {
button.style.display = visible ? "inline" : "none";
}
document.querySelector('div').addEventListener('click', evt => {
if (evt.target.matches('input[type="checkbox"]')) {
buttons.forEach(button => {
let selector = button.getAttribute('data-cb');
let checkboxes = Array.from(document.querySelectorAll(selector));
let someChecked = checkboxes.some(e => e.checked);
setButton(button, someChecked);
});
}
});
buttons.forEach(button => setButton(button, false));
<div>
<input type="checkbox" id="cb1">
<input type="checkbox" id="cb2">
<input type="checkbox" id="cb3">
<button data-cb="#cb1,#cb2">btn1</button>
<button data-cb="#cb2,#cb3">btn2</button>
</div>
推荐阅读
- python - 如何格式化从 mongodb 导出的数据
- asp.net-core - AspNet 核心 2.1 SignalR Angular 7
- razor - 如何在剃须刀页面外调用 Html.Raw 和 Html.Partial?
- assembly - 8086 装配中的星号金字塔
- primefaces - 图表标签在primefaces中重叠
- php - 谷歌云平台无法添加app.yaml
- vba - 在 VBA 中寻找一种方法来拆分 MS Word 中的大量文本以确保它以句点结尾并且少于 280 个字符
- javascript - Meteor/React:在组件外部重定向为 AccountsTemplates.logout() 的回调
- ms-access - VBA 插件错误:“请求的类型库或向导不是 VBA 项目”
- java - 将一个 JSon 字符串数组映射到 Pojo