|
|
|
||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Parceiros - CSS para Web Design - S.O.S Designers - Slackware-Brasil - Crie seu Web site - Oficina da Net |
Continuação do exemplo de onblurFazemos 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.
Autoria e outras referências sobre este artigo Dentro deste artigo: + 1 manual relacionado + 1 categoria relacionada
Manuais relacionados com este artigo Dentro de Programação em Javascript II Anterior: Exemplo do evento onblur em Javascript Categorias relacionadas Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo: + Entrar em JavascriptComentários dos visitantes Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
|
| Sobre nós | Copyright | Anuncie | Entrar em contato | <criarweb> |