Archive for the 'JavaScript' Category

Validação de formulários com Spry

Gosto muito da facilidade de aplicação e da economia de tempo que o Spry proporciona na validação de formulários.

O interessante é que esta validação é feita do lado cliente, ou seja é utilizado o processamento da máquina de quem está no formulário. É importante dizer que as principais validações devem ser feitas também no lado servidor, para garantir que os dados são realmente o que você precisa. A validação no lado servidor pode ser feita em PHP, ColdFusion, ASP ou qualquer outra linguagem que não interfere na validação inicial do formulário em Spry.

Vou mostrar agora, alguns exemplos básicos e até algumas personalizações que você pode fazer.

Neste exemplo vamos abordar:

  • Textos obrigatórios: inputs com preenchimento obrigatório;
  • Campos de datas e horas: com escolha do formato e validação no preenchimento, forçando o usuário a preencher somente com números;
  • Selects;
  • Texto com preenchimento mínimo: mais usados em senhas;
  • Textarea com preenchimento mínimo;
  • Checkbox: para aqueles formulários que é necessário marcar que leu alguma coisa pra prosseguir.

Veja a baixo como é o painel de configuração do Spry para input do tipo text.

Painel de configuração do Spry para input do tipo text

Painel de configuração do Spry para input do tipo text

 O código na página fica bem enxuto:

<script type=”text/javascript”>
<!–
var sprytextfield1 = new Spry.Widget.ValidationTextField(”sprytextfield1″);
var sprytextfield2 = new Spry.Widget.ValidationTextField(”sprytextfield2″, “date”, {format:”dd/mm/yyyy”, useCharacterMasking:true});
var sprytextfield3 = new Spry.Widget.ValidationTextField(”sprytextfield3″, “time”, {useCharacterMasking:true});
var spryselect1 = new Spry.Widget.ValidationSelect(”spryselect1″);
var sprytextfield4 = new Spry.Widget.ValidationTextField(”sprytextfield4″, “none”, {minChars:10});
var sprytextarea1 = new Spry.Widget.ValidationTextarea(”sprytextarea1″, {minChars:50, counterType:”chars_count”, counterId:”countsprytextarea1″, validateOn:["change"], maxChars:500});
var sprycheckbox1 = new Spry.Widget.ValidationCheckbox(”sprycheckbox1″);
//–>
</script>

Agora como seu formulário fica se tentar enviar o formulário, sem que as condições que você configurou, fica para o usuário.

 

Como seu formulário fica se tentar enviar o formulário, sem que as condições que você configurou, fica para o usuário.

Como seu formulário fica se tentar enviar o formulário, sem que as condições que você configurou, fica para o usuário.

Você pode conferir um exemplo aqui.

Mas existem algumas condições em que necessitamos validar o formulário que não estão definidas na biblioteca do Spry.

Vou mostrar outra forma onde você pode mesclar a validação do Spry com validações personalizadas via javascript, isso é possível se utilizarmos o método validate() do Spry.

Neste exemplo, vou fazer a confirmação de texto, muito usada na confirmação da senha digitada. Simplesmente vou verificar se o conteúdo de um input é igual ao outro.

Você pode conferir um exemplo aqui.

Agora, o conteúdo do código fica mais extenso, pois a validação é feita de forma manual e incrementando as funções que desenvolvemos.

<script type=”text/javascript”>
function validar(){
 //Travando o botão pra evitar vários cliques
 document.getElementById(”button”).disabled = true;
 var vali1 = sprytextfield1.validate();
 var vali2 = sprytextfield2.validate();
 var vali3 = sprytextfield3.validate();
 var vali4 = sprytextfield4.validate();
 var vali5 = spryselect1.validate();
 var vali6 = sprytextarea1.validate();
 var vali7 = sprycheckbox1.validate();
 if(vali1 && vali2 && vali3 && vali4 && vali5 && vali6 && vali7 && conteudoIgual()){
  document.getElementById(”form1″).submit();
 } else {
  alert(”Favor preencher corretamente todos os campos obrigatórios!”);
  document.getElementById(”button”).disabled = false;
 }
}
function conteudoIgual(){
 if(document.getElementById(’text1′).value == document.getElementById(’text1_c’).value)
  return true;
 else
  return false;
}
<!–
var sprytextfield1 = new Spry.Widget.ValidationTextField(”sprytextfield1″);
var sprytextfield2 = new Spry.Widget.ValidationTextField(”sprytextfield2″, “date”, {format:”dd/mm/yyyy”, useCharacterMasking:true});
var sprytextfield3 = new Spry.Widget.ValidationTextField(”sprytextfield3″, “time”, {useCharacterMasking:true});
var sprytextfield4 = new Spry.Widget.ValidationTextField(”sprytextfield4″, “none”, {minChars:10});
var spryselect1 = new Spry.Widget.ValidationSelect(”spryselect1″);
var sprytextarea1 = new Spry.Widget.ValidationTextarea(”sprytextarea1″, {minChars:50, counterType:”chars_count”, counterId:”countsprytextarea1″, validateOn:["change"], maxChars:500});
var sprycheckbox1 = new Spry.Widget.ValidationCheckbox(”sprycheckbox1″);
//–>
</script>

É claro que este exemplo é muito simples, mas muitos formulários possuem entrada de validação de CPF, CNPJ, data de nascimento, até mesmo integrações com funções AJAX. Para essas verificações já existem bastantes funções prontas na Web é só você pesquisar e implementar junto ao Spry.

Segue os fontes, onde vocês verão como foi feito os códigos de validação das duas formas.

Arrumando código JavaScript

Este post é pra quem precisa de um “embelezador de código”.

Quando você pegar algum script para dar manutenção e simplesmente ele estiver ilegível, use essa dica!

Algumas APIs utilizam .js compactado, quando quer verificar como eles fizeram tal programação e você abre o .js ele está todo em uma linha, use essa dica!

No site JavaScript Beautifier você coloca o script bagunçado e ele faz toda identação e organização, deixando o código em um formato bem mais fácil de “ler”.

Procurei nos buscadores por “javascript auto formatação” ou “javascript formatar código” e não achei nada parecido!

Agora se você precisa de um compactador de código, use YUI. Nesse site é possível compactar códigos JavaScript e CSS.

Editor de texto online ou wysiwg html

Um amigo questionou sobre os editores de texto online, mais conhecidos como wysiwg html.

Pesquisei e testei alguns editores feitos em JavaScript e o que mais me agradou foi o NicEdit.

O diferencial desse editor é o tamanho. Na versão que tenho aqui deu 34Kb.

A facilidade de utilização também foi um ponto crucial.

Veja exemplo:

Primeiro você inclui o script na sua página.
<script src=”nicEdit/nicEdit.js” type=”text/javascript”></script>

Depois você cria uma instância do editor, referente ao seu textarea, neste caso o id do meu textarea é “teste”.
<script type=”text/javascript”>
bkLib.onDomLoaded(function() {
 new nicEditor().panelInstance(’teste’);
});
</script>

Segue um exemplo online.

Segue os códigos para download.

Utilizei o PHP mas poderia utilizar qualquer outra linguagem Web.

Calendários em Java Script

Acredito que a maioria dos formulários possui algum campo de data (principalmente data de nascimento, rs).

Separei dois tipos de calendários em Java Script para poderem testar.

Gostei muito dos dois, pois são bem fáceis de implementar, além de não usar nenhuma programação do lado do servidor.

Um deles com designer muito bonito e com a possibilidade de customizar do jeito que você achar melhor (isso se achar necessário, pois as opções de layout e designer são muito boas).
O outro é puro HTML + CSS dentro de um único arquivo .js, ou seja, se você tiver um pouco de paciência pode customizar do jeito que quiser.

O Simple Calendar Widget é muito simples, tanto que é apenas um arquivo.

O Mootools-Calendar é uma classe de calendário para ser utilizado junto com o Mootools e tem diversas possibilidades de implementação.
Um ponto que me chamou a atenção, é que nesse caso o usuário não pode alterar a data via teclado, ou seja, a chance dele errar é mínima, mas acredito que existam casos onde essa alteração se faz necessária, procurei no site de origem mas não encontrei tal solução (um atributo ou algo parecido).

Clique aqui para ver o exemplo.

Clique aqui para baixar os arquivos.

Quem quiser ver outros exemplos:
Simple Calendar Widget http://www.garrett.nildram.co.uk/calendar/scw.htm
Calendar Mootools http://electricprism.com/aeron/calendar/

Marcio Nakano