I have a sequence of divs with some similar data-attributes. I would like that when the user selects the checkbox, the divs corresponding to it appear when checked.
The code works to show divs, but when the checkbox is not selected, divs keep showing up.
.letters{
display: none;
}
<div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="a">A</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="c">C</div>
<div class="letters" data-text="a">A</div>
<div class="letters" data-text="c">C</div>
<div class="letters" data-text="a">A</div>
</div>
<input type="checkbox" value="a">a</br>
<input type="checkbox" value="b">b</br>
<input type="checkbox" value="c">c</br>
const elements = document.querySelectorAll(".letters")
const inputs = document.querySelectorAll("input")
inputs.forEach(item => {
item.addEventListener('change', () => {
if (item.checked){
elements.forEach(e => {
if (e.getAttribute('data-text') == item.value) {
e.style.display = "block";
}else{
e.style.display = "none";
}
})
}
})
})
How to make the divs hide when unchecked and keep the other showing when checked?
When the CheckBox is clicked, the ShowHideDiv JavaScript function is executed. Inside this function, based on whether CheckBox is checked (selected) or unchecked (unselected), the HTML DIV with TextBox is shown or hidden.
Answer: Use the jQuery toggle() method The following example will demonstrate you how to show and hide div elements based on the selection of checkboxes using the jQuery toggle() method. The div boxes in the example are hidden by default using the CSS display property which value is set to none .
Please add an else block to hide element when the checkbox is uncheck.
const elements = document.querySelectorAll(".letters");
const inputs = document.querySelectorAll("input");
inputs.forEach(item => {
item.addEventListener('change', function() {
if (this.checked) {
elements.forEach(e => {
if (e.getAttribute('data-text') == this.value) {
e.style.display = "block";
}
})
} else {
elements.forEach(e => {
if (e.getAttribute('data-text') == this.value) {
e.style.display = "none";
}
})
}
})
});
.letters {
display: none;
}
<div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="a">A</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="c">C</div>
<div class="letters" data-text="a">A</div>
<div class="letters" data-text="c">C</div>
<div class="letters" data-text="a">A</div>
</div>
<input type="checkbox" value="a">a</br>
<input type="checkbox" value="b">b</br>
<input type="checkbox" value="c">c</br>
You can try this:
const elements = document.querySelectorAll(".letters")
const inputs = document.querySelectorAll("input")
inputs.forEach(item => {
item.addEventListener('change', () => {
elements.forEach(e => e.style.display = e.getAttribute('data-text') === item.value && item.checked ? 'block' : 'none');
})
})
.letters{
display: none;
}
<div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="a">A</div>
<div class="letters" data-text="b">B</div>
<div class="letters" data-text="c">C</div>
<div class="letters" data-text="a">A</div>
<div class="letters" data-text="c">C</div>
<div class="letters" data-text="a">A</div>
</div>
<input type="checkbox" value="a">a</br>
<input type="checkbox" value="b">b</br>
<input type="checkbox" value="c">c</br>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With