Mariana Hernandez
Mariana Hernandez

Reputation: 1969

jQuery Validate plugin, if statement

I have this validate function:

var validator =$('#form1').validate({
    ignore: "",
    rules: {
        usu_login: { required: true },
        usu_email: { required: true },
        usu_nombre1: { required: true },
        usu_apellido1: { required: true },
        usu_fecha_nac: { required: true },
        usu_cedula: { required: true },
        usu_telefono1: { required: true },
        usu_password: { 
            required: function() { return focusout == true; }
        },
        usu_password2: {
            required: function() { return focusout == true; }
        },
        usu_password3: {
            required: function() { return focusout == true; },
            equalTo: "#usu_password2"
        }
    }
}

I need to apply the same if statement in the equalTo function so this can work as I want to, but I don't know how to do that.

Dows anyone know how? Thanks

Upvotes: 1

Views: 4332

Answers (3)

Manwal
Manwal

Reputation: 23816

in your case you have to add your own method to validator

$.validator.addMethod("mehod", function(value, element) 
{
valid=false;
if(condition==true)//place your  condition
{
valid=true;
}
else
{
valid=false;
}
return this.optional(element) || valid;
},"Your own error message");

and place it where you want to validate

like this:

rules: {
usu_login: { required: true,method: true },//here you are using your method
usu_email: { required: true }
/*other rule*/
}

This works for my case.

Upvotes: 0

Arun P Johny
Arun P Johny

Reputation: 388316

The solution is to use depends property of the rule!!!

jQuery(function ($) {

    var focusout;
    $('#state').change(function(){
        focusout = this.checked;
    }).change();

    var validator = $('#myform').validate({
        ignore: "",
        rules: {
            usu_login: {
                required: true
            },
            usu_email: {
                required: true
            },
            usu_nombre1: {
                required: true
            },
            usu_apellido1: {
                required: true
            },
            usu_fecha_nac: {
                required: true
            },
            usu_cedula: {
                required: true
            },
            usu_telefono1: {
                required: true
            },
            usu_password: {
                required: function () {
                    return focusout == true;
                }
            },
            usu_password2: {
                required: function () {
                    return focusout == true;
                }
            },
            usu_password3: {
                required: function () {
                    return focusout == true;
                },
                equalTo: {
                    depends: function(){
                        return focusout == true;
                    },
                    param: "#usu_password2"
                }
            }
        },
        messages: {}
    });
});

Demo: Fiddle

Upvotes: 2

Yogu
Yogu

Reputation: 9445

You could try this:

var rules = {
    usu_login: { required: true },
    usu_email: { required: true },
    usu_nombre1: { required: true },
    usu_apellido1: { required: true },
    usu_fecha_nac: { required: true },
    usu_cedula: { required: true },
    usu_telefono1: { required: true },
    usu_password: { 
        required: function() { return focusout == true; }
    },
    usu_password2: {
        required: function() { return focusout == true; }
    },
    usu_password3: {
        required: function() { return focusout == true; },
        equalTo: "#usu_password2"
    }
}

if (!focusout) {
    for (key in rules) {
        delete rules[key].equalTo;
    }
}

var validator = $('#form1').validate({
    ignore: "",
    rules: rules
});

The loop iterates over all rules and removes the equalTo constraint if it should be ignored.

However, you have to recreate the validator object every time you change focusout.

Upvotes: 0

Related Questions