284

So I've got code that looks like this:

<input class="messageCheckbox" type="checkbox" value="3" name="mailId[]"> <input class="messageCheckbox" type="checkbox" value="1" name="mailId[]"> 

I just need Javascript to get the value of whatever checkbox is currently checked.

EDIT: To add, there will only be ONE checked box.

4
  • 11
    Why not use radio button? Commented Jul 22, 2012 at 11:06
  • Because I'm writing a plugin for a site Commented Jul 22, 2012 at 11:07
  • If you need only one checkbox, why don't you use radio buttons? this is the more suitable UI component for this job. Commented Feb 15, 2018 at 8:04
  • 5
    @TalYaron Can you deselect a radio buttons ? I think not without js code. Maybe the OP want to deselect the box easily. Commented Aug 21, 2019 at 15:35

19 Answers 19

382

None of the above worked for me but simply use this:

document.querySelector('.messageCheckbox').checked; 
Sign up to request clarification or add additional context in comments.

6 Comments

Where did you get that id? Can you please explain? The guy who asked the question used class in the input actually. It will be good if you can provide the full code so I can understand from where you got the id
This can't work with the example code provided by OP... I'm curious why it got so many upvotes while not answering the question, although a quick fix might make it right.
Can you edit your proposed answer to expand on what this does and how it addresses the OP?
surprised how this answer got many votes!! it is bad practice to use same id for multiple times in a page
@PradeepKumarPrabaharan probably people like me (not using id for multiple items) wondering why .value was giving them undefinied.
|
343

For modern browsers:

var checkedValue = document.querySelector('.messageCheckbox:checked').value; 

By using jQuery:

var checkedValue = $('.messageCheckbox:checked').val(); 

Pure javascript without jQuery:

var checkedValue = null; var inputElements = document.getElementsByClassName('messageCheckbox'); for(var i=0; inputElements[i]; ++i){ if(inputElements[i].checked){ checkedValue = inputElements[i].value; break; } } 

14 Comments

@Mageek it's bad practice to add same id on multiple elements.
@Engineer "Saving bytes" because we must simply write document.getElementById("foo").value(); and "saving calculations" because getElementById is surely speedier than getElementsByTagName and a loop.
for jQuery .is(":checked") is the correct way as .val() will return the attribute value if its defined.. and even if its not defined it will return "on" and not a boolean value.. jsfiddle.net/d5f7wnzu
document.querySelector('.messageCheckbox:checked').value generates TypeError if no checkbox is checked
This blows up - Uncaught TypeError: Cannot read property 'value' of null
|
145

I am using this in my code.Try this

var x=$("#checkbox").is(":checked"); 

If the checkbox is checked x will be true otherwise it will be false.

3 Comments

This does not answer the question, but can be used to determine whether or not a checkbox is checked. +1 since it still helped me out.
Does not answer the question but is exactly what I was looking for.
Useful when #checkbox is a variable, e.g. myCheckbox.
27

in plain javascript:

function test() { var cboxes = document.getElementsByName('mailId[]'); var len = cboxes.length; for (var i=0; i<len; i++) { alert(i + (cboxes[i].checked?' checked ':' unchecked ') + cboxes[i].value); } } 
function selectOnlyOne(current_clicked) { var cboxes = document.getElementsByName('mailId[]'); var len = cboxes.length; for (var i=0; i<len; i++) { cboxes[i].checked = (cboxes[i] == current); } } 

Comments

16

This does not directly answer the question, but may help future visitors.


If you want to have a variable always be the current state of the checkbox (rather than having to keep checking its state), you can modify the onchange event to set that variable.

This can be done in the HTML:

<input class='messageCheckbox' type='checkbox' onchange='some_var=this.checked;'> 

or with JavaScript:

cb = document.getElementsByClassName('messageCheckbox')[0] cb.addEventListener('change', function(){some_var = this.checked}) 

1 Comment

As a future visitor I can confirm that it helps.
7

$(document).ready(function() { var ckbox = $("input[name='ips']"); var chkId = ''; $('input').on('click', function() { if (ckbox.is(':checked')) { $("input[name='ips']:checked").each ( function() {	chkId = $(this).val() + ","; chkId = chkId.slice(0, -1); }); alert ( $(this).val() ); // return all values of checkboxes checked alert(chkId); // return value of checkbox checked } }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <input type="checkbox" name="ips" value="12520"> <input type="checkbox" name="ips" value="12521"> <input type="checkbox" name="ips" value="12522">

Comments

5

Use this:

alert($(".messageCheckbox").is(":checked").val()) 

This assumes the checkboxes to check have the class "messageCheckbox", otherwise you would have to do a check if the input is the checkbox type, etc.

Comments

5
<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="3" name="mailId[]"> <input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="1" name="mailId[]"> 
function getValue(value){ alert(value); } 

Comments

3

None of the above worked for me without throwing errors in the console when the box wasn't checked so I did something along these lines instead (onclick and the checkbox function are only being used for demo purposes, in my use case it's part of a much bigger form submission function):

function checkbox() { var checked = false; if (document.querySelector('#opt1:checked')) { checked = true; } document.getElementById('msg').innerText = checked; }
<input type="checkbox" onclick="checkbox()" id="opt1"> <span id="msg">Click The Box</span>

Comments

3

You could use following ways via jQuery or JavaScript to check whether checkbox is clicked.

$('.messageCheckbox').is(":checked"); // jQuery document.getElementById(".messageCheckbox").checked //JavaScript 

To obtain the value checked in jQuery:

$(".messageCheckbox").is(":checked").val(); 

1 Comment

this code document.getElementById(".messageCheckbox").checked is not correct. getElementById accepts ID of element but you are passing class selector. You need to use either getElementsByClassName or querySelector.
2

Surprised to see no working vanilla JavaScript solutions here (the top voted answer does not work when you follow best practices and use different IDs for each HTML element). However, this did the job for me:

Array.prototype.slice.call(document.querySelectorAll("[name='mailId']:checked"),0).map(function(v,i,a) { return v.value; }); 

Comments

1

if you using after an event occurred you can use

const selected = event.target.checked; //true or false 

An example would be if you want to track selected items, here is an example using react react-hook-form react material ui, it would be better than using value from rendered field that give wrong values

... const [selectedQuestions, setSelectedQuestions] = useState(0); const handleSelectedQuestions = (checked) => { if (checked) { setSelectedQuestions((prev) => prev + 1); } else { setSelectedQuestions((prev) => prev - 1); } }; <Controller key={item.id} control={control} name={`question-${item.id}`} defaultValue={false} render={({ field: { onChange } }) => ( <Grid key={item.id} item xs={12}> <QuestionCard item={item} handleOpen={handleOpen} isLoading={isLoading} isError={isError} onChange={(event) => { handleSelectedQuestions(event.target.checked); onChange(event); }} /> </Grid> )} /> ... 
export default function QuestionsCard({ item, handleOpen, onChange }) { return ( ... <FormControlLabel control={ <Checkbox // checked={value} onChange={onChange} sx={{ '& svg': { fontSize: '1.266rem', }, }} /> } /> ) } 

1 Comment

@herrstrietzel, it was about javascript the first line answer the question then the second code is how to use the first code in react and I have mentioned this too react, react hook form, react material ui
1
var checkedValue = document.getElementById("myCheck").checked; 

checkedValue will be equal to 'true' or 'false'

Comments

0

If you're using Semantic UI React, data is passed as the second parameter to the onChange event.

You can therefore access the checked property as follows:

<Checkbox label="Conference" onChange={(e, d) => console.log(d.checked)} /> 

Comments

0

If you want to get the values of all checkboxes using jQuery, this might help you. This will parse the list and depending on the desired result, you can execute other code. BTW, for this purpose, one does not need to name the input with brackets []. I left them off.

 $(document).on("change", ".messageCheckbox", function(evnt){ var data = $(".messageCheckbox"); data.each(function(){ console.log(this.defaultValue, this.checked); // Do something... }); }); /* END LISTENER messageCheckbox */ 

Comments

0

pure javascript and modern browsers

// for boolean document.querySelector(`#isDebugMode`).checked // checked means specific values document.querySelector(`#size:checked`)?.value ?? defaultSize 

Example

<form> <input type="checkbox" id="isDebugMode"><br> <input type="checkbox" value="3" id="size"><br> <input type="submit"> </form> <script> document.querySelector(`form`).onsubmit = () => { const isDebugMode = document.querySelector(`#isDebugMode`).checked const defaultSize = "10" const size = document.querySelector(`#size:checked`)?.value ?? defaultSize // 👇 for defaultSize is undefined or null // const size = document.querySelector(`#size:checked`)?.value console.log({isDebugMode, size}) return false } </script>

Comments

0

This would be a more simpler approach

const values = Array.from(document.querySelectorAll('[name="mailId[]"]:checked')).map((p) => p.value); 

Comments

0

You may query the checkboxes by their name,

<input type="checkbox" value="1" name="checkboxName"> <input type="checkbox" value="2" name="checkboxName"> <input type="checkbox" value="3" name="checkboxName"> 
document.querySelector("input[name='checkboxName']:checked").value 

Comments

-7

In my project, I usually use this snippets:

var type[]; $("input[name='messageCheckbox']:checked").each(function (i) { type[i] = $(this).val(); }); 

And it works well.

1 Comment

An extremely inefficient way of doing that.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.