Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

111
Views
Button not being enabled after click on checkboxes

So, I have created a table with checkboxes and I want the user to check at least two options in order to enable the button to submit the answers.

HTML

<body>
  <h1>Checked two options</h1>
  <br />
  <p>What are some of your favorite dishes?</p>
  <table id="tblFoods">
    <tr>
      <td><input id="chkPizza" type="checkbox" /><label for="chkPizza">Pizza</label></td>
    </tr>
    <tr>
      <td><input id="chkLasagna" type="checkbox" /><label for="chkLasagna">Lasagna</label></td>
    </tr>
    <tr>
      <td><input id="chkPasta" type="checkbox" /><label for="chkPasta">Pasta</label></td>
    </tr>
    <tr>
      <td><input id="chkBarbecue" type="checkbox" /><label for="chkBarbecue">Barbecue</label></td>
    </tr>
  </table>
  <br />
  <input type="submit" id="mybtn" disabled value="Submit" onclick="EnableButton()" />
</body>

And I have this function, but it's not working. I'm using a looping to count how many options have been checked by the user, but it doesn't work.

JS

function EnableButton() {
  var tblFoods = document.getElementById("tblFoods");
  var checkeds = tblFoods.getElementsByTagName("INPUT");

  var counter = 0;

  for (let i = 0; i < marcados.length; i++) {
    if (checkeds[i].checked) {
      counter++;
    }
  }

  if (counter >= 2) {
    document.getElementById("mybtn").disabled = false;
  } else {
    document.getElementById("mybtn").disabled = true;
  }
}

What am I doing wrong?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You need to check for whether the button needs to be enabled when the inputs get checked, not when the button gets clicked.

The nicest, most concise way to do this is:

const table = document.querySelector('#tblFoods');
table.addEventListener('change', () => {
  const checkedCount = [...table.querySelectorAll('input')].reduce((a, input) => a + input.checked, 0);
  document.getElementById("mybtn").disabled = checkedCount < 2;
});
<h1>Checked two options</h1>
<br/>
<p>What are some of your favorite dishes?</p>
<table id="tblFoods">
  <tr>
    <td><input id="chkPizza" type="checkbox" /><label for="chkPizza">Pizza</label></td>
  </tr>
  <tr>
    <td><input id="chkLasagna" type="checkbox" /><label for="chkLasagna">Lasagna</label></td>
  </tr>
  <tr>
    <td><input id="chkPasta" type="checkbox" /><label for="chkPasta">Pasta</label></td>
  </tr>
  <tr>
    <td><input id="chkBarbecue" type="checkbox" /><label for="chkBarbecue">Barbecue</label></td>
  </tr>
</table>
<br />
<input type="submit" id="mybtn" disabled value="Submit" />

Your original code, tweaked, works too, but is pretty verbose in comparison.

document.querySelector('#tblFoods').addEventListener('change', () => {
   var tblFoods = document.getElementById("tblFoods");
   var checkeds = tblFoods.getElementsByTagName("INPUT");

   var counter = 0;

   for(let i =0; i < checkeds.length;i++)
   {
       if(checkeds[i].checked)
       {
        counter++;
       }
   }

   if(counter>=2)
   {
       document.getElementById("mybtn").disabled = false;
   }
   else
   {
       document.getElementById("mybtn").disabled = true;
   }
});
<h1>Checked two options</h1>
<br/>
<p>What are some of your favorite dishes?</p>
<table id="tblFoods">
  <tr>
    <td><input id="chkPizza" type="checkbox" /><label for="chkPizza">Pizza</label></td>
  </tr>
  <tr>
    <td><input id="chkLasagna" type="checkbox" /><label for="chkLasagna">Lasagna</label></td>
  </tr>
  <tr>
    <td><input id="chkPasta" type="checkbox" /><label for="chkPasta">Pasta</label></td>
  </tr>
  <tr>
    <td><input id="chkBarbecue" type="checkbox" /><label for="chkBarbecue">Barbecue</label></td>
  </tr>
</table>
<br />
<input type="submit" id="mybtn" disabled value="Submit" />

about 4 years ago · Juan Pablo Isaza Report

0

You have to handle the changes on each checkbox element separately and finally, the submit button. You can do something like the below.

Note: See how the onClick event handlers are used on each input type checkbox element and on the submit button separately. Also, we have to reset everything when submitting.

A possible solution:

let checks_counter = 0;

function EnableButton(checkbox) {
  if (checkbox.checked) {
    checks_counter++;
  }

  if (checks_counter > 2) {
    document.getElementById("mybtn").disabled = false;
  } else {
    document.getElementById("mybtn").disabled = true;
  }
}

function submitHandler() {
  var elements = document.getElementsByTagName('input');
  
  //unchecking everything
  for (var i = elements.length; i--;) {
    if (elements[i].type == 'checkbox') {
      elements[i].checked = false;
    }
  }

  //resetting the counter and disabling the button
  checks_counter = 0;
  document.getElementById("mybtn").disabled = true;
}
<body>
  <h1>Checked two options</h1>
  <br/>
  <p>What are some of your favorite dishes?</p>
  <table id="tblFoods">
    <tr>
      <td><input id="chkPizza" type="checkbox" onChange="EnableButton(this)" /><label for="chkPizza">Pizza</label></td>
    </tr>
    <tr>
      <td><input id="chkLasagna" type="checkbox" onChange="EnableButton(this)" /><label for="chkLasagna">Lasagna</label></td>
    </tr>
    <tr>
      <td><input id="chkPasta" type="checkbox" onChange="EnableButton(this)" /><label for="chkPasta">Pasta</label></td>
    </tr>
    <tr>
      <td><input id="chkBarbecue" type="checkbox" onChange="EnableButton(this)" /><label for="chkBarbecue">Barbecue</label></td>
    </tr>
  </table>
  <br />
  <input type="submit" id="mybtn" disabled value="Submit" onclick="submitHandler()" />

</body>

about 4 years ago · Juan Pablo Isaza Report

0

You need to call your Enable function when you check boxes. Here's a working example: https://codesandbox.io/s/proud-architecture-ou5l2?file=/src/index.js

using your existing code:

var tblFoods = document.getElementById("tblFoods");
var checkeds = tblFoods.querySelectorAll("input");
const btn = document.getElementById("mybtn");

function enableButton() {
  var counter = 0;

  for (let i = 0; i < checkeds.length; i++) {
    if (checkeds[i].checked) {
      counter++;
    }
  }

  if (counter >= 2) {
    btn.disabled = false;
  } else {
    btn.disabled = true;
  }
}

const handleClick = () => {
  enableButton();
  // do whatever else you need in here
};

checkeds.forEach((box) => box.addEventListener("click", handleClick));
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!