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...