Reputation: 1969
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
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
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
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