ERRO EM VALIDA?ÃO COM JAVASCRIPT

KELLY 05/02/2015 13:14:19
#444320
Pessoal, estou com uma grande dificultade em localizar o erro no meu código. Estou tentando validar um campo simples de CPF, mas parece que o código em HTML não está nem passando o parâmetro para a minha função. Alguém poderia me dar uma força?

Código em HTML

<!DOCTYPE html>
<html lang=[Ô]pt-BR[Ô]>
<head>
<meta charset=[Ô]UTF-8[Ô]/>
<title>Custom validator</title>
<script lang=[Ô]javascript[Ô] src=[Ô]_javascript/cpf.js[Ô]></script>
<script>
function vCPF(i){
i.setCustomValidity(validaCPF(i.value)?:CPF inválido!);
}
</script>
</head>
<body>
<form>
<label>CPF: <input name=[Ô]cpf[Ô] oninput=[Ô]vCPF(this)[Ô]/></label>
<input type=[Ô]submit[Ô] value=[Ô]Enviar[Ô]/>
</form>
</body>
</html>

Código do arquivo cpf.js

function validaCPF(cpf){

if(cpf.length < 11) return false;

var nonNumbers = /\D/

if(cpf == [Ô]00000000000[Ô] || cpf == [Ô]11111111111[Ô] ||
cpf == [Ô]22222222222[Ô] || cpf == [Ô]33333333333[Ô] ||
cpf == [Ô]44444444444[Ô] || cpf == [Ô]55555555555[Ô] ||
cpf == [Ô]66666666666[Ô] || cpf == [Ô]77777777777[Ô] ||
cpf == [Ô]88888888888[Ô] || cpf == [Ô]99999999999[Ô])
return false;

var a = [];
var b = new Number;
var c = 11;

for(i = 0; i < 11; i++){
a[i] = cpf.charAt(i);
if(i < 9) b += (a[i]* --c);
}

if((x = b%11) < 2){
a[10] = 0} else {a[10] = 11-x
};

if((cpf.charAt(9) != a[9]) || (cpf.charAt(10)!=a[10])) return false;

return true;
}
TUNUSAT 05/02/2015 16:29:44
#444328
Resposta escolhida
Kelly,

Faltou um trecho de código ... vou colocar tudo abaixo:

- DEFAULT.ASPX
<%@ Page Language=[Ô]C#[Ô] AutoEventWireup=[Ô]true[Ô] CodeFile=[Ô]Default.aspx.cs[Ô] Inherits=[Ô]_Default[Ô] %>

<!DOCTYPE html PUBLIC [Ô]-//W3C//DTD XHTML 1.0 Transitional//EN[Ô] [Ô]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[Ô]>

<html xmlns=[Ô]http://www.w3.org/1999/xhtml[Ô]>
<head runat=[Ô]server[Ô]>
<title></title>
<script src=[Ô]JScript.js[Ô] type=[Ô]text/javascript[Ô]></script>
</head>
<body>
<form id=[Ô]form1[Ô] action=[Ô]javascript:void(0)[Ô] onsubmit=[Ô]javascript:validaCPF(this.cpf);[Ô]>
<label>CPF: <input name=[Ô]cpf[Ô] id=[Ô]cpf[Ô] /></label>
<input type=[Ô]submit[Ô] value=[Ô]Enviar[Ô]/>
</form>
</body>
</html>


- CPF,js
function validaCPF(inputCpf) {


var cpf = inputCpf.value;

// alert([Ô]oi[Ô] + cpf.value);

if (cpf.length < 11) return false;

var nonNumbers = /\D/

if (cpf == [Ô]00000000000[Ô] || cpf == [Ô]11111111111[Ô] ||
cpf == [Ô]22222222222[Ô] || cpf == [Ô]33333333333[Ô] ||
cpf == [Ô]44444444444[Ô] || cpf == [Ô]55555555555[Ô] ||
cpf == [Ô]66666666666[Ô] || cpf == [Ô]77777777777[Ô] ||
cpf == [Ô]88888888888[Ô] || cpf == [Ô]99999999999[Ô])
return false;

var a = [];
var b = new Number;
var c = 11;

for (i = 0; i < 11; i++) {
a[i] = cpf.charAt(i);
if (i < 9) b += (a[i] * --c);
}

if ((x = b % 11) < 2) {
a[10] = 0
} else {
a[10] = 11 - x
};

/*
colocar a validacao aqui

*/

alert([Ô]cpf valido[Ô]);

// return true;
}



[][ô]s,
Tunusat.
KELLY 05/02/2015 17:23:26
#444331
Oi Tunusat!!

Eu fiz os ajustes como você fez e deu certo. Fiquei com dúvida sobre as linhas que você inseriu

Por que usou a palavra javascript nesses trechos de código?

action=[Ô]javascript:void(0)[Ô] onsubmit=[Ô]javascript:validaCPF(this.cpf);[Ô]

Por que em action=[Ô]javascript:void(0)[Ô] você informou [Ô]javascript:void(0)[Ô]?

Grata!
TUNUSAT 05/02/2015 18:57:30
#444335
KELLY,

Ixi ... deixa eu ver se consigo explicar. Se ficar ruim espero que alguma outra pessoa te explique melhor...

Bom, você precisa declarar para o form que a função [Ô]validaCPF([Ô] é um JavaScript e recebe [Ô]void[Ô] (vazio), mas passa um CPF de [Ô]this[Ô] (o próprio arquivo que estamos agora). Desta forma não será recarregada a página ... é isto? Ahhh! Deixa eu parar de te tapear e procurar uma explicação na internet! Espera!

Veja:
==========================================================
How to submit form on keypress?
http://stackoverflow.com/questions/17170051/how-to-submit-form-on-keypress
==========================================================
What does “javascript:void(0)” mean?
http://stackoverflow.com/questions/1291942/what-does-javascriptvoid0-mean

O que significa [Ô]javascript: void (0)[Ô] significa?

O operador [Ô]void[Ô] (vazio) avalia a expressão dada e depois retorna indefinido.
O operador [Ô]void[Ô] (vazio) é muitas vezes utilizado apenas para obter o valor primitivo indefinido, geralmente usando [Ô]void (0)[Ô] (o qual é equivalente ao [Ô]void 0[Ô]). Nestes casos, a variável global indefinida pode ser utilizado em vez (assumindo que não foi atribuído a um valor não-padrão).
==========================================================
http://www.tizag.com/javascriptT/javascriptvoid.php

JavaScript Void 0 Explanation

----------- JavaScript Vazio 0 Explicação

Os navegadores da Web vai tentar tirar tudo o que é usado como um URL e carregá-lo. A única razão que podemos usar uma declaração de alerta JavaScript sem carregar uma nova página é porque alerta é uma função que retorna um valor nulo. Isto significa que quando o navegador tenta carregar uma nova página que vê nulo e não tem nada para carregar.

O importante a notar aqui é que se você sempre usar uma instrução JavaScript como a URL que retorna um valor, o navegador irá tentar carregar uma página. Para evitar que essa ação não desejada, você precisa usar a função nula com tal declaração, que sempre retornará nulo e nunca carregar uma nova página.

----------- Simples Vazio JavaScript 0 Exemplo Simples

vazio é um operador que é usada para devolver um valor nulo de modo que o navegador não será capaz de carregar uma nova página. Uma coisa importante a notar sobre o operador vazio é que ele requer um valor e não pode ser usado por si só. Aqui está uma maneira simples de usar void para cancelar o carregamento da página.

----------- Simples Vazio JavaScript 0 Exemplo Útil

Este exemplo mostra como você iria retornar um valor usando o operador vazio. myNum é uma variável que nós definido para o valor 10. Em seguida, usamos o mesmo myNum variável em uma operação de alerta.
==========================================================

Melhorando a explicação:
Vai fazer a chamada no [Ô]OnSubmit[Ô] e não no [Ô]Action[Ô]. é o mesmo que colocar REF:# ...

[][ô]s,
Tunusat.
KELLY 28/02/2015 00:21:58
#444846
TUNUSAT muuuuuuuuuuuuitíssimo obrigada pela paciência, pela ajuda e pela atenção!!

Tópico encerrado , respostas não são mais permitidas