Dynamic jQuery Validation
Dynamic adding/removal of validation rules for jQuery Validate library.
by cstepaniuk
HTML
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<label><input type="radio" name="switchVal" checked value="2">One out of three</label><br>
<label><input type="radio" name="switchVal" value="3">Two out of three</label><br>
<br><br>
<form id="mainForm">
Field 1: <input id="field1" type="text"><br>
Field 2: <input id="field2" type="text"><br>
Field 3: <input id="field3" type="text"><br>
Field 4: <input id="field4" type="radio"><br>
Field 5: <input id="field5" type="radio"><br>
Field 6: <input id="field6" type="radio"><br>
<br><br>
<input id="submitButton" value="Submit" type="submit">
</form>
JavaScript
(function($) {
jQuery.validator.addMethod("require_from_group2", function(value, element, options) {
// Based on require_from_group method, which is included with jQuery Validate itself, in the additional-methods.js file.
// This version is Ryley's answer at http://stackoverflow.com/questions/4128657/jquery-validation-changing-rules-dynamically
// and his JSFiddle at http://jsfiddle.net/ryleyb/wHpus/66/
var validator = this;
var minRequired = options[0];
var selector = options[1];
var validOrNot = jQuery(selector, element.form).filter(function() {
return validator.elementValue(this);
}).length >= minRequired;
// remove all events in namespace upload
jQuery(selector, element.form).off('.require_from_group2');
if (this.settings.onkeyup) {
jQuery(selector, element.form).on({
'keyup.require_from_group2' : function(e) {
jQuery(selector, element.form).valid();
}
});
}
if (this.settings.onfocusin) {
jQuery(selector, element.form).on({
'focusin.require_from_group2' : function(e) {
jQuery(selector, element.form).valid();
}
});
}
if (this.settings.click) {
jQuery(selector, element.form).on({
'click.require_from_group2' : function(e) {
jQuery(selector, element.form).valid();
}
});
}
if (this.settings.focusout) {
jQuery(selector, element.form).on({
'focusout.require_from_group2' : function(e) {
jQuery(selector, element.form).valid();
}
});
}
return validOrNot;
});
function addRules(rulesObj, ruleName) {
for (var item in rulesObj) {
$('#' + item).rules('add', rulesObj[item]);
}
}
function removeRules(rulesObj, ruleName) {
for (var item in rulesObj) {
$('#' + item).rules('remove');
}
}
function removeRulesGroup(rulesGroupObj) {
// Remove all rules defined rulesGroupObj config object.
// rulesGroupObj might be rules config object (i.e. an "associative" array) or it may be a "proper"
// array of rule objects. It doesn't matter. jQuery.each() will still...