Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show/Hide divs with data-attribute based on checkboxex checked

Tags:

javascript

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?

like image 998
Camile Avatar asked Jan 06 '20 05:01

Camile


People also ask

How to show and Hide div on CheckBox using JavaScript?

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.

How to show and Hide div element based on the click of CheckBox in jQuery?

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 .


2 Answers

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>
like image 182
Sohail Ashraf Avatar answered Oct 20 '22 01:10

Sohail Ashraf


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>
like image 29
Tân Avatar answered Oct 20 '22 01:10

Tân