Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pfcneves

Chamar uma função externa dentro de outra

Recommended Posts

Viva pessoal,

 

Estou a fazer um formulário básico mas com muitas validações e diferentes mensagens de alerta e bloquei em 2 questões:

 

1º - Verificar se o primeiro caractere de um campo de formulário é uma letra ou não e se não for mostrar um alerta.

 

2º - Chamar um JS externo dentro de um IF para validar o CPF.

 

Sei que o meu código deve parecer estranho, mas é necessário mostrar diferentes tipos de alertas para diferentes situações e eu não sei outra forma de o fazer.

 

Neste momento o meu código está assim...

 

Formulário:

<form onsubmit="return valida(this);">
Nome: <input type="text" name="nome" maxlength="50" size="50"><br><br>
Telefone: <input type="text" name="tel" maxlength="10" size="10"> (Formato: DDD+TELEFONE: 1122223333)<br><br>
CPF: <input type="text" name="cpf" maxlength="11" size="11"><br><br>
<input type="submit" onclick="valida()" value="Submeter">
</form>

Função de validação:

<script>

function valida(form) {

// Verifica se o campo NOME está vazio

if (form.nome.value=="") {
alert("O campo NOME está vazio.");
form.nome.focus();
return false;
}

// Verifica se o campo NOME tem no mínimo 5 caracteres

if (form.nome.value.length<5) {
alert("O campo NOME deve ter no mínimo 5 caracteres.");
form.nome.focus();
return false;
}

// Verifica se o campo NOME começa por uma letra

//	if (         ) {
//	alert("O campo NOME deve começar por uma letra.");
//	form.nome.focus();
//	return false;
//	}

// Verifica se o campo TELEFONE está vazio

if (form.tel.value=="") {
alert("O campo TELEFONE está vazio.");
form.tel.focus();
return false;
}

// Verifica se o campo TELEFONE é numérico

if (isNaN(form.tel.value)){
alert("O campo TELEFONE só pode conter números.");
form.tel.value="";
form.tel.focus();
return false;
}

// Verifica se o campo TELEFONE tem 10 digitos

if (form.tel.value.length<10) {
alert("Preencha o TELEFONE corretamente (tem que possuir 10 dígitos numéricos).");
form.tel.focus();
return false;
}

// Verifica se o campo CPF está vazio

if (form.cpf.value=="") {
alert("O campo CPF está vazio.");
form.cpf.focus();
return false;
}

// Verifica se o campo CPF é numérico

if (isNaN(form.cpf.value)){
alert("O campo CPF só pode conter números.");
form.cpf.value="";
form.cpf.focus();
return false;
}

// Verifica se o campo CPF tem 11 digitos

if (form.cpf.value.length != 11) {
alert("Preencha o CPF corretamente (tem que possuir 11 dígitos numéricos).");
form.cpf.focus();
return false;
}

// Verifica se o campo CPF é válido

//	if (         )){
//	alert("O CPF indiado é inválido.");
//	form.cpf.value="";
//	form.cpf.focus();
//	return false;
//	}

</script>

Arquivo JS que nomeei como (validarCPF.js) e que foi retirado do código fonte do site da Receita Federal e onde fiz uma pequena alteração nomes:

function ValidaCPF(numCPF) {
var Soma;
var Resto;
Soma = 0;

if (numCPF == "00000000000") return false;
for (i=1; i<=9; i++)
Soma = Soma + parseInt(numCPF.substring(i-1, i)) * (11 - i);
Resto = (Soma * 10) % 11;

if ((Resto == 10) || (Resto == 11)) Resto = 0;
if (Resto != parseInt(numCPF.substring(9, 10)) ) return false;

Soma = 0;
for (i = 1; i <= 10; i++)
Soma = Soma + parseInt(numCPF.substring(i-1, i)) * (12 - i);
Resto = (Soma * 10) % 11;

if ((Resto == 10) || (Resto == 11)) Resto = 0;

if (Resto != parseInt(numCPF.substring(10, 11) ) ) return false;

return true;
}

Pode não ser muito ortodoxo (acho eu) mas todo o código está a funcionar direitinho à excepção das validações que descrevi e que estão localizadas em:

 

// Verifica se o campo NOME começa por uma letra

// Verifica se o campo CPF é válido

 

Se alguém poder dar uma ajuda, agradeço.


e já agora, porque é que me está a surgir este erro na consola:

 

Uncaught TypeError: Cannot read property 'nome' of undefined

 

Reportando a esta linha de código:

 

if (form.nome.value=="") {

 

No código que postei anteriormente está na linha 7.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para verificar se o primeiro caracter do nome é letra, pode ser feito assim:





//Verifica se o campo NOME começa por uma letra

var primeiraLetra = form.nome.value;
primeiraLetra = primeiraLetra.substring(0, 1);
primeiraLetra = typeof primeiraLetra;

if (primeiraLetra != "string") {
alert("O campo NOME deve começar por uma letra.");
form.nome.focus();
return false;
}



Pra validar o cpf, porque não coloca a function, junto com as demais?


Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado @itlpps,

 

Tentei a tua solução, mas se eu colocar no campo nome 1dsfsdf, ele valida como certo e continua.

 

Relativamente ao CPF, posso colocar a função com as demais, sem problema, como chamo essa função dentro de um IF???

Por exemplo, supondo que a minha função para validar o CPF se chama:

function ValidaCPF(numCPF) 

Como a chamo neste IF:

// Verifica se o campo CPF é válido

	if (         ){
	alert("O CPF indiado é inválido.");
	form.cpf.value="";
	form.cpf.focus();
	return false;
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra validar o Nome, pode usar regex também, ele não permite número no txt, olha como ficou:

  if (!form.nome.value.match(/^[a-zA-Z] $/) && form.nome.value != "") {
                form.nome.value = "";
                form.nome.focus();
                alert("Digite apenas letras no campo nome");
            }

do CPF, com a function ValidaCpf na mesma página

// Verifica se o campo CPF é válido

    if (!ValidaCpf(form.cpf.value)){
    alert("O CPF indiado é inválido.");
    form.cpf.value="";
    form.cpf.focus();
    return false;
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou perfeitamente @itlpps,

 

Obrigado pela ajuda.

 

Valeu também pelas dicas @angelorubim, vou dar uma olhada detalhada nos links que sugeriste durante as férias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.