I have a single form that, depending on which radio button is clicked (Login or Signup), displays either:
or:
Clicking on the radio button toggles the visibility of the Login/Signup fields:
<form id="myForm">     <input name="userAction" type="radio" value="login" checked="checked">Login</input>     <br />     <input name="userAction" type="radio" value="signup">Sign Up</input>      <div id="loginFields" style="display:none">         <!-- Login fields (email address and password) -->     </div>      <div id="signupFields" style="display:none">         <!-- Signup fields (name, age, email address, password) -->     </div> </form>   I'm using the jQuery Validation plug-in, and I'd like to use the following rules:
var signupRules = {     emailAddressTextBox:     {         required: true,         email: true      },     passwordTextBox:     {         required: true,         minlength: 6,         maxlength: 24,         passwordValidationRule: true // custom regex added with $.validator.addMethod()     } };  var loginRules = {     nameTextBox:     {         required: true,         maxlength: 50     },     loginEmailAddressTextBox:     {         required: true,         email: true      },     loginPasswordTextBox:     {         required: true,         minlength: 6,         maxlength: 24,         passwordValidationRule: true // custom regex added with $.validator.addMethod()     },     loginPasswordAgainTextBox:     {         required: true,         minlength: 6,         maxlength: 24,         equalTo: "#loginPasswordTextBox"         passwordValidationRule: true // custom regex added with $.validator.addMethod()             } };   How can I add the correct validation rule dynamically based on:
   $("input[name='userAction']").change(function() {         if ($("input[name='userAction']:checked" ).val() === "login") {             // use loginRules         } else {             // use signupRules         }     });   I've tried the following:
$("#myForm").validate({     rules: ($("input[name='userAction']:checked" ).val() === "login") ? loginRules : signupRules; });   But since my Login fields are the default displayed, its validations work, but the Signup scenario doesn't; it wants to validate Login fields for some reason. Am I missing something?
Ahh validation plugin, always so tricky :(
First, I added id attributes to all the input boxes. Then, I made a change function for you:
$("input[name='userAction']").change(function() {     $('#signupFields').toggle();     $('#loginFields').toggle();         if ($("input[name='userAction']:checked").val() === "login") {         removeRules(signupRules);         addRules(loginRules);     } else {                 removeRules(loginRules);         addRules(signupRules);      } });   The add and remove functions look like this:
function addRules(rulesObj){     for (var item in rulesObj){        $('#'+item).rules('add',rulesObj[item]);       }  }  function removeRules(rulesObj){     for (var item in rulesObj){        $('#'+item).rules('remove');       }  }   That's pretty much it. See here for a working example: http://jsfiddle.net/ryleyb/wHpus/66/
EDIT: To me, the non-intuitive part is that I don't see an easy way to add/remove rules to the whole form after you call validate, instead you have to manipulate the individual form elements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With