Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal,
Estou tendo problemas com duas funções que estou utilizando em um input.
Quando uso as funções "mascara(this,cpf) e validaCpf(document.formulario.edtCpf);" com a segunda sem o .value a mascara funciona.
Se utilizo o "mascara(this,cpf) e validaCpf(document.formulario.edtCpf.value);", a validação funciona e a mascara não.
function validaCpf(num) {
//Feito Alteração em 29/05/2012 devido a Mascara do CPF - Éverton Leonardo
num = num.replace(".", "");
num = num.replace(".", "");
num = num.replace("-", "");
var i
var j
var soma
var aux
var digito
cpf = num
if (num.length > 10){
if (num.length != 11){
alert('Número do CPF Inválido! - falta algum número')
return false;
}
if (
num == "00000000000" ||
num == "11111111111" ||
num == "22222222222" ||
num == "33333333333" ||
num == "44444444444" ||
num == "55555555555" ||
num == "66666666666" ||
num == "77777777777" ||
num == "88888888888" ||
num == "99999999999"
){
alert('Número do CPF Inválido ! - repetição total de números')
document.formulario.edtCpf.focus();
return false;
}
aux = num.substr(0, num.length-2);
for (j=1; j<=2; j++){
soma = 0;
for (i=0; i<=aux.length-1; i++){
soma = soma + (aux.substr(aux.length - 1 - i, 1) * (i + 2) * 10);
}
aux = aux + "01234567890".substr((soma % 11), 1);
}
if (aux != num){
alert('O Número de CPF informado é Inválido')
document.formulario.edtCpf.value = ""
document.formulario.edtCpf.focus();
return false;
}
if (aux == num){
return true;
}
}
}
function mascara(o, f) {
v_obj = o
v_fun = f
setTimeout("execmascara()", 1)
}
function execmascara() {
v_obj.value = v_fun(v_obj.value)
}
function soNumeros(v) {
return v.replace(/\D/g, "")
}
function cpf(v) {
v = v.replace(/\D/g, "") //Remove tudo o que não é dígito
v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos
v = v.replace(/(\d{3})(\d)/, "$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos
//de novo (para o segundo bloco de números)
v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
return v
}
<td><input id="edtCpf" name="edtCpf" type="text" class="caixa" size="14" maxlength="14" value="<% Response.Write(stNrCpf) %>" onblur="mascara(this,cpf);" onkeypress="somenteNumeros(document.formulario.edtCpf);mascara(this,cpf);validaCpf(document.formulario.edtCpf.value); return SubmitEnter(this,event);" />
Valeu!!
Ficou certo, porém surgiu outro problema..
Ele faz uma outra validação caso o usuário tenha precionado o enter e nesse momento ele não valida o cpf, a não ser que o cara retire o cursor do input.
Como resolvo para ele validar depois dessa função com o enter?
//Carregar dados do formulário
function SubmitEnter(campo,e) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;
if (keycode == 13) {
//campo.formulario.submit();
var edtCpf = document.formulario.edtCpf.value;
var hdnVlProduto = document.formulario.hdnVlProduto.value;
var hdnTempoGarantia = document.formulario.hdnTempoGarantia.value;
var hdnOrcamento = document.formulario.hdnOrcamento.value;
var hdnId_Produto = document.formulario.hdnId_Produto.value;
if (edtCpf != "") {
$("#consulta").load('modulos/te_EnviaAjax.asp?edtCpf=' + edtCpf + '&stAcao=cpf' + '&garantia=' + hdnTempoGarantia + '&hdnVlProduto=' + hdnVlProduto + '&hdnOrcamento=' + hdnOrcamento + '&hdnId_Produto=' + hdnId_Produto);
return false;
}
return false;
} else {
return true;
}
}E ai galera..
Já resolvi essa questão. chamei a função depois que valida o cpf quando ele precionar o enter
if (edtCpf != "") {
if (validaCpf(edtCpf) == false) {
return false;
} else {
$("#consulta").load('minha pagina');
//alert(edtCpf)
}
return false;
}
Resolvido!!
chame a sua função validaCpf no evento onblur.