Checkboxes allow users to select one or more options from a set. Getting the values of selected checkboxes is therefore essential in JavaScript to determine what the user has chosen.
In this comprehensive guide, we‘ll explore different methods to get checkbox values in JavaScript.
Why Get Checkbox Values in JavaScript?
Here are some common cases where you need to get checkbox values:
-
Validating forms: Before submitting a form, you may want to check that the user has selected the required checkboxes. Getting checkbox values allows you to perform this validation.
-
Collecting user input: In surveys, questionnaires, etc. you can use checkboxes to let users provide multiple answers. Retrieving the values tells you what options the user selected.
-
Toggle functionality: Checkboxes can show/hide other elements on a page. Accessing checkbox values helps determine when to toggle those elements.
-
Remembering user choices: Store checkbox values so when the user returns, you can populate those options. This improves the experience.
-
Creating multi-select boxes: By getting values of checked checkboxes, you can build custom multi-select interfaces with conditional drop-downs.
-
Managing state: Getting checkbox values allows you to update component state in frameworks like React when values change.
-
Conditional logic: Showing different UI message or paths based on combinations of checkbox selections requires analyzing the values.
The ability to get checkbox values is thus important for various use-cases. Next let‘s see different ways to get values.
Accessing Checkboxes via DOM
Before getting checkbox values, we need access to the checkbox elements themselves. The key is using DOM (Document Object Model) manipulation.
Some common DOM methods for accessing elements:
- document.getElementById: Get element by its ID
- document.getElementsByClassName: Get elements by their class name
- document.getElementsByTagName: Get elements by their tag name
- document.querySelector: Get first matching element using CSS selector
- document.querySelectorAll: Gets all matching elements as a NodeList
For example:
// By ID
var checkbox = document.getElementById("myCheckbox");
// By class name
var checkboxes = document.getElementsByClassName("checkbox");
// By tag name
var inputs = document.getElementsByTagName("input");
We‘ll focus most on querySelector/querySelectorAll, but you can use any of these methods.
Browser Compatibility:
The querySelector methods and getElementById have excellent > 99% browser support. getElementsByClassName has support back to IE9. getElementsByTagName back to IE6 (caniuse).
In older browsers, you may need polyfills/fallbacks but generally these DOM methods work reliably across browsers.
Get Single Checkbox Value
To get an individual checkbox value, use document.querySelector() to access the checkbox, then check its checked and value properties:
// Get checkbox
var checkbox = document.querySelector("#myCheckbox");
// Get value
var value;
if (checkbox.checked) {
value = checkbox.value;
}
- We first get the checkbox using its ID
- The checked property tells if it‘s checked
- If checked, we get its value via the value property
Alternatively, you can skip the variable and directly query the element:
var value;
if (document.querySelector("#myCheckbox").checked) {
value = document.querySelector("#myCheckbox").value;
}
This lets you get a single checkbox value directly in one go!
Benefits:
- Simple and straight-forward to implement
- No loops/iteration needed
Drawbacks:
- Need to call separately for each checkbox
- Can repeat a lot of code
Get Multiple Checkbox Values
For multiple checkboxes, we can use a loop through each one:
// Get all checkboxes
var checkboxes = document.querySelectorAll(".checkbox");
// Loop through checkboxes
for (var i = 0; i < checkboxes.length; i++) {
// Current checkbox
var checkbox = checkboxes[i];
// If checked
if (checkbox.checked) {
// Do stuff with value
}
}
But looping through each checkbox can be tedious.
A better approach is to use Array.from() combined with Array.filter():
// Convert to array
var checkboxes = Array.from(document.querySelectorAll(".checkbox"));
// Filter checked boxes
var checked = checkboxes.filter(checkbox => checkbox.checked);
// Map to values
var values = checked.map(checkbox => checkbox.value);
Here’s what happens:
- Convert NodeList into an array using Array.from()
- Filter array to only checked checkboxes
- Map checked checkboxes to an array of their values
This returns an array of the selected checkbox values directly!
The same logic works with other DOM methods like getElementsByClassName.
Benefits:
- Avoid manual loops and iteration
- Simple chaining of array methods
- Returns just values ready for use
Drawbacks:
- More advanced syntax to understand
Toggle Checkbox Example
A common use-case is to toggle some UI element based on checkbox state.
Here’s an example with a text box that shows/hides depending on checkbox value:
<input type="checkbox" id="toggle">
<textarea id="textbox">I will appear when toggled!</textarea>
<script>
var checkbox = document.getElementById("toggle");
var textbox = document.getElementById("textbox");
if (checkbox.checked) {
textbox.style.display = "block";
} else {
textbox.style.display = "none";
}
checkbox.addEventListener("click", function() {
if (checkbox.checked) {
textbox.style.display = "block";
} else {
textbox.style.display = "none";
}
})
</script>
- Checkbox toggles text box visibility
- Access value on page load
- Also update on click event
This kind of toggle pattern is widely useful for showing/hiding elements, dividers, second-level options etc.
Here‘s a more advanced example with multiple sections controlled by toggles:
<input type="checkbox" id="section1Toggle"> Section 1 Content
<div id="section1">
<p>This section will toggle show/hide</p>
</div>
<input type="checkbox" id="section2Toggle"> Section 2 Content
<div id="section2">
<p>The second section will also toggle</p>
</div>
<script>
// Get checkboxes and sections
const checkbox1 = document.getElementById("section1Toggle");
const content1 = document.getElementById("section1");
const checkbox2 = document.getElementById("section1Toggle");
const content2 = document.getElementById("section2");
// Toggle handler
function toggleSection(checkbox, content) {
if(checkbox.checked) {
content.style.display = "block";
} else {
content.style.display = "none";
}
}
// Set initial state
toggleSection(checkbox1, content1);
toggleSection(checkbox2, content2);
// Add event listeners
checkbox1.addEventListener("click", () => toggleSection(checkbox1, content1));
checkbox2.addEventListener("click", () => toggleSection(checkbox2, content2));
</script>
This reusable toggle logic can handle showing/hiding arbitrary sections as needed.
Get Checkbox Input on Form Submit
Another important scenario is getting checked values when a form is submitted.
Here‘s an example form with checkboxes:
<form id="myForm">
<input type="checkbox" name="option" value="1"> Option 1
<input type="checkbox" name="option" value="2"> Option 2
<button type="submit">Submit</button>
</form>
<script>
var form = document.getElementById("myForm");
form.addEventListener("submit", function() {
// Checked checkboxes
var checked = document.querySelectorAll(‘input[name="option"]:checked‘);
// Values array
var values = [];
checked.forEach(checkbox => {
values.push(checkbox.value);
});
// Log values
console.log(values);
});
</script>
When the form is submitted, we:
- Use querySelectorAll to get checked boxes
- Loop through them collecting values
- Log the values array
This allows you to process checkbox data on form submit.
You could also make an AJAX request to submit the values to the server.
Check All Checkboxes
A common need is having a "Select All" checkbox that checks all options.
Here‘s how to implement with DOM manipulation:
<input type="checkbox" id="selectAll"> Select All
<div id="checkboxes">
<input type="checkbox" class="box">
<input type="checkbox" class="box">
<input type="checkbox" class="box">
</div>
<script>
var selectAll = document.getElementById("selectAll");
var boxes = document.getElementsByClassName("box");
selectAll.addEventListener("click", function() {
for (var i = 0; i < boxes.length; i++) {
boxes[i].checked = this.checked;
}
})
</script>
It works by:
- Getting all checkboxes
- Listening for click on Select All checkbox
- Looping through the boxes, setting checked equal to state of Select All
This allows you to easily implement a "check all" option!
Store Checkbox Values
To remember checkbox selections for a user between sessions, you can store the values:
Browser Storage
Local storage or session storage can hold checkbox values:
// Helper to get all checked
function getCheckedBoxes() {
// Query and filter like before
return checkedBoxes;
}
// Set initially from storage
var checkedBoxes = JSON.parse(localStorage.getItem("checkboxes")) || [];
// Subscribe to changes
document.addEventListener("input", () => {
// Get current checks
var checked = getCheckedBoxes();
// Set in storage
localStorage.setItem("checkboxes", JSON.stringify(checked));
});
Server
You can also persist checkbox values to a database on the backend:
// On submit
fetch("/update-checkboxes", {
method: "POST",
body: JSON.stringify(checkedBoxes)
})
// Retrieve
fetch("/get-checkboxes")
.then(res => res.json())
.then(checked => {
// Set checks
})
This lets you maintain checkbox state for a user across sessions!
Get Values on Change
For cases like surveys where values may change often, you can get values on change events:
var checkboxes = document.querySelectorAll(".option");
checkboxes.forEach(checkbox => {
checkbox.addEventListener("change", function() {
// Current checkbox changed
var value = this.value;
var checked = this.checked;
// React to change
});
});
- Add change listener to each checkbox
- React to change of each one
You get the instant state on any change. Useful for dynamic interfaces!
This also integrates nicely with frontend frameworks:
// Vue
data() {
return {
checkboxes: []
}
}
// Checkbox change handler
handleChange(e) {
this.checkboxes = // Get checked values
}
// React
const [checks, setChecks] = React.useState([]);
// On change
setChecks(getCheckedValues());
So you can easily integrate with components.
Optimize Performance
Some optimization tips when working with multiple checkboxes:
Event Delegation
Instead of separate change listeners, use event delegation:
document.addEventListener("change", e => {
if(e.target.matches(".checkbox")) {
// Checkbox changed
}
})
Throttle Rapid Changes
For surveys, throttle change events:
// 10ms throttle
const throttled = _.throttle(updateCheckboxes, 10);
checkboxes.addEventListener("change", throttled);
This prevents too frequent updates.
Comparison of Techniques
There are a few options for identifiers when selecting checkboxes:
Approach | Example | Pros | Cons |
---|---|---|---|
ID | #checkbox | Explicit unique identifier | Need to manually add ID to each |
Name + Value | Value attribute allows getting actual value without separate lookup | Relying solely on name can have collisions with other form elements | |
Class | .checkbox | Single class minimizes markup needed | Not unique – multiple elements can have same class |
Data Attributes | data-id="1" | Custom attributes allow adding metadata without hacky workarounds | Browser support is generally less consistent than native attributes |
So ID and name+value attributes provide the most robust and flexible approaches in most cases.
JavaScript Libraries
While we‘ve focused on plain JavaScript, libraries like jQuery can simplify some syntax:
// jQuery
var checked = $("input:checked");
checked.each(function() {
// this = checkbox
})
The DOM manipulation and events are abstracted a bit.
So jQuery can provide handy shortcuts in some cases, but understanding the native JavaScript is important especially with modern frameworks.
Conclusion
Getting checkbox values is important for validating forms, showing/hiding elements, storing selections, and many other cases.
We learned several approaches:
- Get single checkbox value checking properties
- Get multiple values using loops/array methods
- Toggle elements based on checkbox state
- Collect values on form submit
- Implement select all behavior
- Store values in browser/server
- React to change events
Additionally:
- Used advanced examples of toggle interfaces and "check all" patterns
- Discussed integrating checkboxes with state management in modern frameworks
- Looked at performance optimization strategies
- Compared technique pros/cons in a summary table
- Examined using JavaScript libraries like jQuery
So that covers the main techniques for getting checkbox values with JavaScript in depth! Checking and reacting to checkbox state is vital for many interactive interfaces and complex forms.