39

using jquery I want to make a selection from a select box required (ie it can't be left as the blank default) if a particular checkbox is ticked. My code:

$(document).ready(function(){
  $("#myForm").validate({
    rules: {
      myDropDown: {
        required: {       
          depends: function(element) {
            return $("#myCheckbox:checked")
          }
        }
      }
    }
  })
})

The html:

<input type="checkbox" name="myCheckbox" id="myCheckbox" value="1">
<select name="myDropDown" id="myDropDown">
  <option value="" selected></option>
  <option value="1">Choice 1</option>
  <option value="2">Choice 2</option>
  <option value="3">Choice 3</option>
</select>

Not only is the code not working it's throwing out the jquery tabs that I have as the next section of javascript.

Any advice appreciated.

Edit: Now that I've sorted out all my brackets the behaviour now is that it's making the select box a required field whether or not the checkbox is checked - ie the depends part is not working. Other javascript on the page is now working ok.

1
  • Sorry, I'm using jquery.validate.min.js Commented Jul 4, 2011 at 16:25

5 Answers 5

57

it should be able to work just like that:

rules : {
 myDropDown:{required:"#myCheckbox:checked"}
}
Sign up to request clarification or add additional context in comments.

3 Comments

This does work, and is the standard method per the documentation: jqueryvalidation.org/category/methods/…
this is the most simplest answer, and therefore the better way.
This should be the checked answer
34

Please try like this

$(document).ready(function(){
  $("#myForm").validate({
    rules: {
       myDropDown:{
          required: function (element) {
             if($("#myCheckbox").is(':checked')){
                 var e = document.getElementById("myDropDown");
                 return e.options[e.selectedIndex].value=="" ;                            
             }
             else
             {
                 return false;
             }  
          }  
       }
    }
  });
});

2 Comments

Hi, thanks but that still makes the dropdown required whether or not the checkbox is checked.
me edited the code.. please check it. added a return false in the else condition
8

This works like a charm

inputname:
{
    required: function(){
        if($("select[name=inputname]").val() == 1){
            return true;
        }
        else
        {
            return false;
        }
    }
}

You can edit the inputname to yours prefered.

To change it to input field, you can change the select part to input

3 Comments

That could be compressed to required: function(){ return $("select[name=inputname]").val() == 1; }
Or rather: required: function(){ return $("#elementID").val() === 1; }
Per the documentation (jqueryvalidation.org/category/methods/…) the proper method to use is rules : { myDropDown: required:{"#myCheckbox:checked"}}
0

I don't know what plugin you are using, but

 return $("#myCheckbox:checked")

returns a Jquery object if your checkbox is checked. I think it would be more correct to do:

 return $("#myCheckbox").is(':checked')

which returns true or false.

Maybe this has nothing to to with your problem

2 Comments

The code is based on the second 'rules' example here: docs.jquery.com/Plugins/Validation/validate#toptions
Thanks, but changing the line you suggest allows no selection to be made when the checkbox is checked.
0
rules: {
    myDropDown: {
        required: function() {
            return $("input[id='checkbox']").val() == "1";
        }
    }
}

If the checkbox is checked here, it validates the myDropDown element.

OR

rules: {
    area1: {
        required: function() {
            return $("input[id='checkbox']").is(':checked');
        }
    },
    area2: {
        required: function() {
            return !$("input[id='checkbox']").is(':checked');
        }
    }
}

//return !$ or return $

both work fine..

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.