Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Programação em Javascript II
SEÇÕES
Manuais relacionados
+Programação em Javascript II
Categorias
+Javascript

Índice do Manual Programação em Javascript II
+ Introdução ao manual II de Javascript
+ Livraria de funções Javascript
+ Exemplos das funções da livraria Javascript
+ Objetos em Javascript
+ Objetos incorporados em Javascript
+ Classe string em Javascript
+ Exemplos de funcionamento da classe String
+ Classe Date em Javascript
+ Exemplo de funcionamento de Date
+ Classe Math em Javascript
+ Classe Number em Javascript
+ Classe Boolean em Javascript
+ Criação de classes em Javascript
+ Criação de classes em Javascript II
+ Criação de classes em Javascript III
+ Hierarquia de objetos do navegador
+ Trabalhando com a hierarquia em Javascript
+ Objeto Window de Javascript
+ Métodos de window em Javascript
+ Exemplos de métodos de Window
+ Objeto document em Javascript
+ Exemplos de propriedades de document
+ Métodos de document
+ Fluxo de escritura do documento
+ Trabalho com formulários em Javascript
+ Ex. de trabalho com formulários. Calculadora simples
+ Propriedades e métodos do objeto form
+ Controle de campos de texto com Javascript
+ Controle de checkbox em javascript
+ Controle de botões de radio em Javascript
+ Controle de campos select com Javascript
+ Controle de elementos Textarea em Javascript
+ Os eventos em Javascript
+ Os manipuladores de eventos em Javascript
+ Exemplos de eventos em Javascript. Onabort
+ Exemplo do evento onblur em Javascript
+ Continuação do exemplo de onblur
+ Elementos de formulário select associados
+ Evento onunload de Javascript
+ Evento onload de Javascript

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Continuação do exemplo de onblur

Fazemos um exemplo de validação de campos de un formulário utilizando como base o evento onblur e solucionando um problema de bucle infinito.


Vimos o exemplo no exemplo do método onblur relatado anteriormente uma possível técnica para comprovar os dados de um campo de formulário. Agora vamos ver como evoluir esta técnica se tivermos mais de um campo a validar, dado que se pode complicar bastante o problema.

De fato, antes de ler nossa solução proposta, creio que seria um bom exercício para o leitor praticar esse mesmo exemplo para os dois campos e trabalhar um pouco com a página para ver se encontramos algum problema.

Muito provavelmente, encontraremos com um curioso loop infinito que nos vai dar mais quebra-cabeça para solucionar.

Na prática, o leitor pode tentar validar um número inteiro e um código postal. Para validar um código postal necessitamos comprovar que é uma cadeia de texto composta geralmente por 5 caracteres e todos são inteiros.

Se alguém quiser tentar, a função para validar um código postal seria algo parecido com isto:

function ValidoCP(){
    CPValido=true
    //se não tem 5 caracteres não é válido
   if (document.f1.codigo.value.length != 5)
         CPValido=false
      else{
         for (i=0;i<5;i++){
            CAtual = document.f1.codigo.value.charAt(i)
            if (validarInteiro(CAtual)==""){
               CPValido=false
               break;
            }
         }
      }
   return CPValido
}


Simplesmente se encarrega de comprovar que o campo de texto contém 5 caracteres e de fazer um percorrido por cada um dos caracteres para comprovar que todos são inteiros. A princípio se supõem que o código postal é correto, colocando a variável CPValido a true, e se alguma comprovação falha muda-se o estado correto a incorreto, passando tal variável a false.

Pode-se comprovar ao montar o exemplo com dois campos...nós agora vamos dar uma solução ao problema bastante complicadinha, pois incluímos instruções para evitar o efecto do loop infinito. Não vamos ver o exemplo que daria o erro, deixamos para aqueles que desejarem tentar por si mesmo e recomendamos fazer isto porque assim, compreenderemos melhor o seguinte código.

<html>
<head>
    <title>Evento onblur</title>

<script>
avisado=false
function validarInteiro(valor){
      //tento converter a inteiro.
      //se era um inteiro nao lhe afeta, e se nao era tenta converte-lo
       valor = parseInt(valor)

      //Comprovo se é um valor numérico
      if (isNaN(valor)) {
         //entao (nao é numero) devolvo o valor cadeia vazia
         return ""
      }else{
         //No caso contrario (Se era um número) devolvo o valor
         return valor
      }
}

function comprovaValidoInteiro(){
   inteiroValidado = validarInteiro(document.f1.numero.value)
   if (interoValidado == ""){
      //se era a cadeia vazia é que nao era válido. Aviso
      if (!avisado){
         alert ("Deve escrever um inteiro!")
         //seleciono o texto
         document.f1.numero.select()
         //coloco outra vez o foco
         document.f1.numero.focus()
         avisado=true
         setTimeout('avisado=false',50)
      }
   }else
      document.f1.numero.value = inteiroValidado
}

function comprovaValidoCP(){
   CPValido=true
   //se nao tem 5 caracteres nao é válido
   if (document.f1.codigo.value.length != 5)
      CPValido=false
   else{
      for (i=0;i<5;i++){
         CAtual = document.f1.codigo.value.charAt(i)
         if (validarInteiro(CAtual)==""){
            CPValido=false
            break;
         }
      }
   }
   if (!CPValido){
      if (!avisado){
         //se nao é valido, aviso
         alert ("Deve escrever um código postal válido")
         //seleciono o texto
         document.f1.codigo.select()
         //coloco outra vez o foco
         //document.f1.codigo.focus()
         avisado=true
         setTimeout('avisado=false',50)
      }
   }
}
</script>

</head>
<body>

<form name=f1>
Escreva um número inteiro: <input type=text name=numero size=8 value="" onblur="comprovaValidoInteiro()">
<br>
Escreva um código postal: <input type=text name=codigo size=8 value="" onblur="comprovaValidoCP()"> *espera uma cadeia com 5 carácteres numéricos

</form>

</body>
</html>


Este exemplo continua a guia do primeiro exemplo de onblur deste artigo, incluiendo um novo campo a validar.

Para solucionar o tema do loop infinito, que vocês poderam investigar por vocês mesmos e no qual se mostrava uma caixa de alerta atrás da outra indefinidamente, utilizamos uma variável chamada avisado que contem um true se já foi avisado de que o campo estava mal e um false se ainda não foi avisado.

Quando se mostra a caixa de alerta, se comprova se foi avisado ou não ao usuário. Se já foi avisado não se faz nada, evitando que se mostrem mais caixas de alerta. Se ainda não foi avisado mostra-se a caixa de alerta e coloca-se o foco no campo que era incorreto.

Para restituir a variável avisado a false, de modo que a próxima vez que se escreva mal o valor se mostre a mensagem correspondente, se utiliza o método setTimeout, que executa a instrução com um atraso, neste caso de 50 milésimos de segundos. O suficiente para que não se meta em um loop infinito.

Nota: Depois de todos os apetrechos que tivemos que colocar para que este evento se comporte corretamente para cumprir com o objetivo desejado, é possível pensar que não vale a pena utiliza-lo neste objetivo. Podemos fazer uso do evento onchange, ou comprovar todos os campos de uma vez só quando o usuário decidiu envia-lo.

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Programação em Javascript II

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em Javascript


Comentários dos visitantes
Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
Acrescentar um comentário do artigo Acrescentar um comentário do artigo



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites