Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript to check whether a checkbox is being checked or unchecked

Tags:

javascript

I have a javascript routine that is performing actions on a group of checkboxes, but the final action I want to set the clicked checkbox to checked or unchecked based on if the user was checking the box or unchecking.

Unfortunately, every time I check for whether it is being checked or unchecked, it returns "on" indicating the user is always checking the box! Any help would be appreciated, I've also included the javascript.

// Uncheck all the checkboxs with the same Tax Credit for (i=0; i<arrChecks.length; i++) {     var attribute = arrChecks[i].getAttribute("xid")     if (attribute == elementName)     {         // if the current state is checked, unchecked and vice-versa         if (arrChecks[i].value == "on")   // <-- This is always returning true, even if the box is being unchecked         {             arrChecks[i].checked = 1;         } else {             arrChecks[i].checked = 0;         }      } else {         arrChecks[i].checked = 0;     } }  
like image 840
Mark Kadlec Avatar asked Jan 23 '09 16:01

Mark Kadlec


People also ask

How do you check all checkbox is checked or not?

To check whether a Checkbox has been checked, in jQuery, you can simply select the element, get its underlying object, instead of the jQuery object ( [0] ) and use the built-in checked property: let isChecked = $('#takenBefore')[0]. checked console. log(isChecked);

Which method is used to check the status of checkbox?

prop() and is() method are the two way by which we can check whether a checkbox is checked in jQuery or not. prop(): This method provides an simple way to track down the status of checkboxes. It works well in every condition because every checkbox has checked property which specifies its checked or unchecked status.


2 Answers

You should be evaluating against the checked property of the checkbox element.

for (i=0; i<arrChecks.length; i++) {     var attribute = arrChecks[i].getAttribute("xid")     if (attribute == elementName)     {         // if the current state is checked, unchecked and vice-versa         if (arrChecks[i].checked)         {             arrChecks[i].checked = false;         } else {             arrChecks[i].checked = true;         }      } else {         arrChecks[i].checked = false;     } } 
like image 171
steve_c Avatar answered Sep 22 '22 04:09

steve_c


The value attribute of a checkbox is what you set by:

<input type='checkbox' name='test' value='1'> 

So when someone checks that box, the server receives a variable named test with a value of 1 - what you want to check for is not the value of it (which will never change, whether it is checked or not) but the checked status of the checkbox.

So, if you replace this code:

if (arrChecks[i].value == "on")  {     arrChecks[i].checked = 1; } else {     arrChecks[i].checked = 0; } 

With this:

arrChecks[i].checked = !arrChecks[i].checked; 

It should work. You should use true and false instead of 0 and 1 for this.

like image 39
Paolo Bergantino Avatar answered Sep 25 '22 04:09

Paolo Bergantino