Validate subset of a form using jQuery Validate plugin Validate subset of a form using jQuery Validate plugin jquery jquery

Validate subset of a form using jQuery Validate plugin


Taking what jAndy suggested, I created this helper function:

jQuery.validator.prototype.subset = function(container) {    var ok = true;    var self = this;    $(container).find(':input').each(function() {        if (!self.element($(this))) ok = false;    });    return ok;}

usage:

if (wizardForm.validate().subset('#first-step')) {    // go to next step}


I tried this solution and it didn't work for me. So here is how i achieved same behaviour, using jquery.validation plugin.

The validator:

var form = $('#form');    // init validator obj and set the rules    form.validate({        errorElement: 'span', //default input error message container        errorClass: 'help-inline', // default input error message class        focusInvalid: false, // do not focus the last invalid input        ignore: "",        rules: {            // the rules, as usual        },        highlight: function (element) { // hightlight error inputs            $(element).closest('.control-group').addClass('error'); // set error class to the control group        },        unhighlight: function (element) { // revert the change dony by hightlight            $(element)                .closest('.control-group').removeClass('error'); // set error class to the control group        }    });

Using bootstrap form wizard.

This is how i validate each step:

$('#step :input').valid()

Works like a charm.


If you look at the options for the validate() function one of the options is ignore, which by default will prevent the validator from attempting to validate any fields that match the CSS pseudo-class :hidden. I used this in combination with the FuelUX Wizard and was able to prevent the wizard from progressing to the next step with the following:

$( '#wizard' ).wizard().on( 'change', function( event, info ) {    if ( ! $( '#wizard_form' ).valid() ) event.preventDefault();});