SO Validation dynamic rules
See: http://stackoverflow.com/questions/4128657/jquery-validation-changing-rules-dynamically
by ryleyb
HTML
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/themes/smoothness/jquery-ui.css">
<script src="http://jquery.bassistance.de/validate/jquery.validate.js"></script>
<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">
Login:
<input id="loginEmailAddressTextBox" name="loginEmailAddressTextBox" type="text">
<input id="loginPasswordTextBox" name="loginPasswordTextBox" type="password">
</div>
<div id="signupFields" style="display:none">
Signup:
<input id="emailAddressTextBox" name="emailAddressTextBox" type="text">
<input id="passwordTextBox" name="passwordTextBox" type="password">
</div>
<input type="submit">
</form>
JavaScript
var signupRules = {
emailAddressTextBox: {
required: true,
email: true
},
passwordTextBox: {
required: true,
minlength: 6,
maxlength: 24
//passwordValidationRule: true // custom regex added with $.validator.addMethod()
}
};
var loginRules = {
loginEmailAddressTextBox: {
required: true,
email: true
},
loginPasswordTextBox: {
required: true,
minlength: 6,
maxlength: 24
//passwordValidationRule: true // custom regex added with $.validator.addMethod()
}
};
$("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);
}
});
function addRules(rulesObj){
for (var item in rulesObj){
$('#'+item).rules('add',rulesObj[item]);
}
}
function removeRules(rulesObj){
for (var item in rulesObj){
$('#'+item).rules('remove');
}
}
$('#myForm').validate({
submitHandler: function(){
alert('submit was successful');
}
});
addRules(loginRules);