Validating a radio button is checked with jQuery
Asked Answered
R

7

5

On my form I havea set of radio buttons. Here's the mark up:

<div class="optionHolder">
    <p class="optionName">Format</p>
    <div class="option checked">
        <input type="radio" name="fileType" value="avi" />
        <img src="images/avi.png" alt="" />
        <label>AVI</label>
    </div>
    <div class="option">
        <input type="radio" name="fileType" value="mov" />
        <img src="images/mov.png" alt="" />
        <label>MOV</label>
    </div>
    <div class="option">
        <input type="radio" name="fileType" value="mp4" />
        <img src="images/mp4.png" alt="" />
        <label>MP4</label>
    </div>
    <div class="option">
        <input type="radio" name="fileType" value="mp3" />
        <img src="images/mp3.png" alt="" />
        <label>MP3</label>
        </div>
</div>

When the form is submitted I want to check that one of them is checked. What's the best way to go about this? I was thinking of looping through them all and making a flag to set if one of them is checked, and then check the flag after the loop and if it's false throw an error.

Any help is appreciated, cheers.

Roseboro answered 23/9, 2010 at 15:41 Comment(0)
F
21

You can use the length and equal attribute selector with :checked filter selector like this:

if ($("input[name='fileType']:checked").length > 0){
  // one ore more checkboxes are checked
}
else{
 // no checkboxes are checked
}
Flowerer answered 23/9, 2010 at 15:52 Comment(3)
You need to check length to be > 0, not just definedBullington
I did. And I did not down-vote. You need to compare it with zero. Just checking if(.length) checks if it is defined or not. When set to 0, it is still defined. This code does will not work consistently.Bullington
@Josh Stodola: Modified as per what you said :)Flowerer
R
5

demo

http://jsfiddle.net/Vq2jB/2/

var isChecked = jQuery("input[name=fileType]:checked").val();
Reed answered 23/9, 2010 at 15:51 Comment(2)
Your way works, but if nothing is selected, your getting undefined instead of false for isChecked. If I'm going to all the var isChecked, I want it to be either true or false. Not true or undefined. Yes, if I go if isChecked it works the same way, but it feels slightly off to me anyway.Ditheism
i have added a demo and fixed that problem.Reed
D
4

Try the jQuery Validation plugin. It can do a lot for you and be really useful for lots of different forms. If you want to do it very simply:

if($("input[name=fileType]:checked").length > 0) {
   //Is Valid
}
Ditheism answered 23/9, 2010 at 15:49 Comment(1)
@kitsched Questions like this get answered really fast!Ditheism
E
2

Try:

var checkbox = $("input[@name='fileType']:checked");

if( checkbox.length > 0 ) {
    alert( checkbox.val() ); // checkbox value
} else {
    alert('Please select a format'); // error
}

http://jsfiddle.net/wE4RD/

Eri answered 23/9, 2010 at 16:3 Comment(0)
P
2

Really old, I know. If a radio selection is not selected it returns as 'undefined', not '0'. In my example I declare a variable with the value of the radio buttons. If said value is undefined, the javascript returns false.

gender = $('input[name=gender]:checked').val();

if(typeof gender === 'undefined'){
    alert('Do not move on');
    $('input[name=gender]').css('box-shadow', '0 0 2px 0 red');
    return false;
}    
Purveyor answered 11/9, 2013 at 19:5 Comment(0)
B
1

I think $('input[name=fileType]:checked').length will do the trick.

Barri answered 23/9, 2010 at 15:49 Comment(0)
R
0

You could check to see if the checked radio button name returns a value in jQuery:

if($("input[@name='fileType']:checked").val() != null){
    // button checked
}
Retrospection answered 23/9, 2010 at 15:48 Comment(2)
-1 No, val() returns null when no elements are found, and certainly null !== ""Bullington
Why is the null still there?Application

© 2022 - 2024 — McMap. All rights reserved.