Exemplo prático de uso de Mootools - Textarea com conta de caracteres

Um exemplo de uso de Mootools para recopilar e consolidar os conhecimentos vistos até agora no manual de Mootools. Vamos criar um textarea que conta os caracteres escritos pelo usuário.

Por Mario Matías Sebely


Publicado em: 29/11/09
Valorize este artigo:
Chegou o momento de revisar todos os conhecimentos adquiridos até o momento no manual de Mootools. Já vimos bastantes coisas sobre o manejo deste framework Javascript, por isso estamos prontos para criar um primeiro exemplo que explora muitas das funcionalidades que estamos aprendendo. Este exemplo nos dará uma visão mais global sobre o bom uso de Mootools e de sua potência, e ainda nos ajudará a consolidar os distintos conhecimentos que aprendemos anteriormente.

Nosso exemplo será a construção de um campo textarea que tenha ao lado um texto onde se mostra o número de caracteres que tem. Vamos construí-lo por meio da programação orientada a objetos, tal como se deve fazer em Mootools, com o qual poderemos reutilizar o código facilmente para outros projetos onde queiramos utilizar este "textarea inteligente". Outra das vantagens será que poderemos ter convivendo vários campos textarea que contem seus caracteres na mesma página, cuja implementação não requeira duplicar código Javascript, e sem que interfiram entre si as contas de caracteres dos diferentes textareas do documento.

Podemos ver uma página com o funcionamento deste exemplo em funcionamento.

Insisto, a idéia deste primeiro exemplo global de Mootools não é estudar ou depurar a funcionalidade deste "textarea contador de caracteres", e sim mostrar aos leitores deste manual um uso adequado do framework, de modo que o leitor possa criar suas próprias classes para implementar funcionalidades no cliente para suas próprias páginas.

Criar uma classe com Mootools para implementar uma funcionalidade

A maneira correta de proceder para fazer um script com Mootools é criar uma classe, de programação orientada a objetos, que implemente as funcionalidades com as que queremos adotar a nossa página. Poderemos instanciar essa classe para criar objetos Mootools que se encarreguem de automatizar os processos dinâmicos. Assim poderemos instanciar qualquer número de objetos para que realizem estas funcionalidades por si só e poderemos nos despreocupar de sua complexidade e reutilizar o código onde o desejarmos.

As bases para fazer tudo isto foram aprendidas neste manual, portanto não deveria dar muito problema entender o código e senão, simplesmente seria reler os artigos os quais se fala dasclasses de Mootools .

A classe tem um construtor, ao qual teremos que passar os parâmetros para personalizar o comportamento desse objeto e associá-lo com os elementos da página com os que queiramos que trabalhe. A estas alturas deveríamos conhecer também como criar um construtor da classe.

No construtor iniciaremos todos os componentes dos objetos uma vez sejam criados. Neste caso teremos que receber o identificador (id) do textarea a contar caracteres e então criaremos toda a estrutura para mostrar caracteres e criar os eventos para contá-los quando o usuário os escreva.

No resto da classe teremos que criar os métodos que estimemos necessários para implementar as funcionalidades de conta de caracteres.

Sendo assim, vamos mostrar já o código da classe e logo iremos comentando as diferentes partes.

//crio uma classe para conseguir que um textarea tenha um contador de caracteres
var TextareaContador = new Class({
   //defino um construtor, que recebe o id do textarea
   initialize: function(idTextarea){
      //recupero o elemento textarea com a função dólar
      this.textarea = $(idTextarea);
      //crio um elemento SPAN para mostrar o contador
      this.campoContador = new Element ("span", {"class": "estilocontador"});
      //injeto o contador depois do textarea
      this.campoContador.inject(this.textarea, "after");
      
      //crio um evento para o textarea, keyup, para quando o usuário solta a tecla
      this.textarea.addEvent("keyup", function(){
         //simplesmente chamo a um método desta classe que conta caracteres
         this.contaCaracteres();
      }.bind(this)
      );
      
      //chamo ao método que conta caracteres, para iniciar o contador
      this.contaCaracteres();
   },
   
   //crio um método para contar os caracteres
   cuentaCaracteres: function(){
      //simplesmente escrevo no campo contador o número de caracteres atual do textarea
      this.campoContador.set("html", "Número caracteres: " + this.textarea.value.length);
   }
});   

O código da classe está comentado para que se possa saber o que se faz cada passo. Porém, vou dar uma série de referências onde podemos entender e aprender tudo o que fizemos no script.

//crio uma classe para conseguir que um textarea tenha um contador de caracteres
var TextareaContador = new Class({

Ver o artigo que fala sobre as classes.

//defino um construtor, que recebe o id do textarea
initialize: function(idTextarea){

Ver o artigo que fala sobre construtores.

//recupero o elemento textarea com a função dólar
this.textarea = $(idTextarea);

Ver o artigo sobre a função dólar.

//crio um elemento SPAN para mostrar o contador
this.campoContador = new Element ("span", {"class": "estilocontador"});
//injeto o contador depois do textarea
this.campoContador.inject(this.textarea, "after");

Nestas linhas criamos um elemento de texto onde mostraremos a conta de caracteres. Logo, colocamos no código da página depois do textarea, com o que aparecerá perto, posicionado tal como o indiquemos no estilo CSS da classe "estilocontador". Ver o artigo de construção de elementos na página. Ver o artigo de inserção de elementos na página.

//crio um evento para o textarea, keyup, para quando o usuário solta a tecla
this.textarea.addEvent("keyup", function(){
   //simplesmente chamo a um método desta classe que conta caracteres
   this.contaCaracteres();
}.bind(this)

Aqui se está definindo um evento, que associamos com o objeto textarea do objeto, para que quando se escreva algo no campo se atualize a conta de caracteres mostrada ao lado do textarea. (O evento "keyup" se ativa quando o usuário clica uma tecla e logo a solta, porém, só no momento de soltar a tecla). Para processar o evento se cria uma função que simplesmente chama ao outro método da classe onde se realiza a conta de caracteres. Ver o artigo onde se fala de eventos. Ver o artigo onde se fala de a função bind()

//chamo ao método que conta caracteres, para iniciar o contador
this.contaCaracteres();

O construtor termina chamando ao método contaCaracteres(), com o qual se iniciará o contador de caracteres, caso no textarea já houvesse algum texto escrito previamente.

//crio um método para contar os caracteres
contaCaracteres: function(){
   //simplesmente escrevo no campo contador o número de caracteres atual do textarea
   this.campoContador.set("html", "Número caracteres: " + this.textarea.value.length);
}

Neste método se atualiza o campo de contagem, mudando sua propriedade HTML para mostrar a conta atual de caracteres. Ver artigo onde se explica o método set de um elemento da página.

Isso foi todo o código da classe TextareaContador.

Agora seria bom ver o código HTML que teremos na página para criar dois "textareas inteligentes":

<textarea id="textocontador"></textarea>
<br>
<br>
<textarea id="outro" cols=50 rows=8>Este textarea tem texto escrito...</textarea>

Só necessitamos observar os Ids dos textarea, que utilizaremos para nos referir a eles na hora de criar os objetos para que funcione a conta de caracteres.

Por último, vejamos o código para instanciar os objetos TextareaContador, uma vez que o DOM da página esteja pronto para receber modificações dinâmicas por Javascript.

//crio um evento para quando está pronto o DOM da página
window.addEvent("domready", function(){
   //crio o objeto TextareaContador, passando o identificador do textarea que se pretende contar caracteres.
   texto = new TextareaContador("textocontador");
   otro = new TextareaContador("outro");
});

Ver o artigo sobre o evento "domready" do objeto window que utilizamos para fazer coisas quando o DOM está pronto. Ver também o artigo que fala sobre instanciação e trabalho com objetos em Mootools

O código completo deste exercício

<html>
<head>
   <title>Textarea que conta caracteres escritos</title>
   <script src="mootools-1.2.1-core-yc.js" type="text/javascript"></script>
   <style type="text/css">
   span.estilocontador{
      display: block;
      margin-top: 3px;
      width: 120px;
      font-size:8pt;
   }
   </style>
<script>
//crio uma classe para conseguir que um textarea tenha um contador de caracteres
var TextareaContador = new Class({
   //defino um construtor, que recebe o id do textarea
   initialize: function(idTextarea){
      //recupero o elemento textarea com a função dólar
      this.textarea = $(idTextarea);
      //crio um elemento SPAN para mostrar o contador
      this.campoContador = new Element ("span", {"class": "estilocontador"});
      //injeto o contador depois do textarea
      this.campoContador.inject(this.textarea, "after");
      
      //crio um evento para o textarea, keyup, para quando o usuário solta a tecla
      this.textarea.addEvent("keyup", function(){
         //simplesmente chamo a um método desta classe que conta caracteres
         this.contaCaracteres();
      }.bind(this)
      );
      
      //chamo ao método que conta caracteres, para iniciar o contador
      this.contaCaracteres();
   },
   
   //crio um método para contar os caracteres
   contaCaracteres: function(){
      //simplesmente escrevo no campo contador o número de caracteres atual do textarea
      this.campoContador.set("html", "Número caracteres: " + this.textarea.value.length);
   }
});   

//crio um evento para quando está pronto o DOM da página
window.addEvent("domready", function(){
   //crio o objeto TextareaContador, passando o identificador do textarea que se pretende contar caracteres.
   texto = new TextareaContador("textocontador");
   otro = new TextareaContador("outro");
});
</script>
</head>

<body>
<form>
<textarea id="textocontador"></textarea>

<br>
<br>
<br>
<textarea id="outro" cols=50 rows=8>Este textarea tem texto escrito...</textarea>
</form>
<br>
<br>
<a href="http://www.criarweb.com">http://www.criarweb.com</a>
</body>
</html>

Podemos ver o exemplo em uma página à parte.

Espero que com este exercício, assimilando os conhecimentos que já havíamos adquirido no manual de Mootools, possamos entender o processo completo de implementação e andamento de classes úteis para fazer efeitos na página.






Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato