Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, como converto esse código para o jquery validate:
function checaForm(nomeform) {
// verifica se pelo menos um telefone foi preenchido
if (nomeform.x_telresidencial.value.length == 0) {
//if (nomeform.x_telresidencial.value.length == 0) {
if (nomeform.x_telcomercial.value.length == 0) {
if (nomeform.x_telcelular.value.length == 0) {
alert("Você deve preencher pelo menos um número de telefone!");
nomeform.x_telresidencial.focus();
return false;
}
else if (nomeform.x_telcelular.value.length < 9) {
alert("O número do celular não é válido!");
nomeform.x_telcelular.focus();
return false;
}
}
else if (nomeform.x_telcomercial.value.length < 9) {
alert("O número do telefone para recado não é válido!");
nomeform.x_telcomercial.focus();
return false;
}
}
else if (nomeform.x_telresidencial.value.length < 9) {
alert("O número do telefone comercial não é válido!");
nomeform.x_telresidencial.focus();
return false;
}
return true;
} x_telresidencial: {required: function(element) {
//return $("#x_telcelular").val() < 13;
//return $("#x_telcelular").is(':empty');
if ($("#x_telcelular").is(':empty') && $("#x_telcomercial").is(':empty')){
return true;
}
//else if ($("#x_telcomercial").val().length > 0){
// return false;
//}
else {
return false;
}
}
},
e nada...
sds
Olá Yuri, obrigado,
Também uso este script para fazer as máscaras, o que preciso mesmo é da validação, ou seja, preciso que um telefone seja obrigatório, tipo, se ele preencheu o celular, não precisa do telefone residencial nem do trabalho, ou se preencheu o de trabalho, não preciso do celular e residencial...
sds
if (telefone1 != 0) || (telefone2 != 0) || (telefone3 != 0) {
return true;
} else {
alert("pelo menos um contato deve ser preenchido.");
return false;
}Olá Bergs, obrigado pela resposta, mas ainda não consegui colocar isso dentro do plugin jquery.validate, pois eu preciso que seja obrigatório que um seja preenchido... atualmente valido os telefones via javascript normal, e os demais campos em jquery.validate, por isso quero eliminar a validação separada dos telefones...
rules: {
x_nome: {required: true},
x_telresidencial: {required: true},
x_telcelular: {required: true},
x_telcomercial: {required: true}
}
sds
veja se consegue fazer criando um novo método de validação no validate.
documentação:
http://validation.bassistance.de/jQuery.validator.addMethod/
Olá, encontrei isso:
jQuery.validator.addMethod("require_from_group", function(value, element, options) {
var numberRequired = options[0];
var selector = options[1];
var fields = $(selector, element.form);
var filled_fields = fields.filter(function() {
// it's more clear to compare with empty string
return $(this).val() != "";
});
var empty_fields = fields.not(filled_fields);
// we will mark only first empty field as invalid
if (filled_fields.length < numberRequired && empty_fields[0] == element) {
return false;
}
return true;
// {0} below is the 0th item in the options field
}, jQuery.format("Please fill out at least {0} of these fields."));
e usando assim
x_telresidencial: {require_from_group: [1,".requiredFromGroup"]},
x_telcelular: {require_from_group: [1,".requiredFromGroup"]},
x_telcomercial: {require_from_group: [1,".requiredFromGroup"]},
e no campo coloquei a classe: "requiredFromGroup"...
Mas o validador passa batido...
algo de errado?
sds
Bem, consegui esse método aqui:
jQuery.validator.addMethod("require_from_group", function (value, element, options) {
var numberRequired = options[0];
var selector = options[1];
var fields = $(selector, element.form);
var filled_fields = fields.filter(function () {
// it's more clear to compare with empty string
//return $(this).val() != "";
return $(this).val().length < 9;
});
var empty_fields = fields.not(filled_fields);
// we will mark only first empty field as invalid
if (filled_fields.length < numberRequired && empty_fields[0] == element) {
return false;
}
return true;
// {0} below is the 0th item in the options field
}, jQuery.format("'Please enter either username/ email address to recover password'/Please fill out at least {0} of these fields."));
Aparentemente, funciona, só que, como uso a mascara ele não está funcionando direito (penso que é isso), pois se colocar a máscara fica (__) ____-____, ele considera também como caracteres? como excluir a máscara da contagem de caracteres?
Ao invés de
return $(this).val() != "";
coloquei
return /^\(\d{2}\) \d{4}\-\d{4}?$/.test($(this).val());
e até funciona na hora do submit, no entanto, não valida instataneamente, exemplo, ao sair do campo, se ele estiver ok, os demais já ficam como válidos, e vice-versa...
Como fazer isso?
----------------------------------------------------------------------------------------------------
Bem, aparentemente, resolvido com o código abaixo:
x_telresidencial: {telefoneBR: true, require_from_group: [1,".telefones"]},
x_telcelular: {telefoneBR: true, require_from_group: [1,".telefones"]},
x_telcomercial: {telefoneBR: true, require_from_group: [1,".telefones"]},
jQuery.validator.addMethod("telefoneBR", function(value, element) {
return this.optional(element) || /^\(\d{2}\) \d{4}\-\d{4}?$/.test(value);
}, "Digite um telefone válido");
jQuery.validator.addMethod("require_from_group", function(value, element, options) {
//http://stackoverflow.com/questions/1300994/jquery-validate-require-at-least-one-field-in-a-group-to-be-filled
var numberRequired = options[0];
var selector = options[1];
var validOrNot = $(selector, element.form).filter(function() {
// Each field is kept if it has a value
return $(this).val();
// Set to true if there are enough, else to false
}).length >= numberRequired;
if(!$(element).data('being_validated')) {
var fields = $(selector, element.form);
fields.data('being_validated', true);
fields.valid();
fields.data('being_validated', false);
}
return validOrNot;
}, jQuery.format("preencha pelo menos {0} dos campos."));
por algum motivo, quando valido, o campo telcelular fica diferente dos demais, mas isso é uma outra história... obrigado a todos pela contribuição!
Cara, tenho masks simples, se te ajudar: