Mostrar uma mensagem quando input está vazio

Sabe aquelas caixas de busca que mostram, por exemplo, "Buscar" e que quando colocamos o foco, o texto some para escrevermos o que quisermos? Vamos mostrar aqui uma função javascript para aplicar essa funcionalidade a elementos input.

A idéia é que a função recebe como parâmetros o elemento input e a mensagem a ser exibida quando não houver outro texto digitado e aplica isso ao input. Lá vai a função:
 

  1. function msgIfEmpty(el, msg) {
  2. var hasval = /\w/.test(el.value);
  3.   if(!hasval) {
  4.   el.value = msg;
  5.   addClass(el, 'disabled');
  6.   }
  7. el.defaultValue = msg;
  8.   el.onfocus = function() {
  9.     if(this.value == this.defaultValue) {
  10.     this.value = '';
  11.     removeClass(this, 'disabled');
  12.     }
  13.   };
  14.   el.onblur = function() {
  15.     if(/^\s*$/.test(this.value)) {
  16.     this.value = this.defaultValue;
  17.     addClass(this, 'disabled');
  18.     }
  19.   };
  20. }

Começamos aplicando a mensagem como valor default do input (e como valor do atributo value se não há valor declarado). Então definimos funções para os eventos onfocus e onblur do elemento.

Adicionalmente, adicionamos a classe 'disabled' quando a mensagem está sendo exibida. Para isso, usamos as funções (bastante conhecidas) addClass e removeClass, mostradas abaixo.

  1. function addClass(el, classn) {
  2. removeClass(el, classn);
  3. el.className += ' '+classn;
  4. }
  5.  
  6. function removeClass(el, classn) {
  7.   if (!(el && el.className)) return;
  8. var cls = el.className.split(/\s+/), ar = [];
  9.   for(var i = cls.length; i > 0;) if(cls[--i] != classn) ar.push(cls[i]);
  10. el.className = ar.join(" ");
  11. }

Essa é uma função simples e útil, poupando o trabalho de reescrever esse simples javascript em cada elemento. Veja um exemplo de uso aqui.

Categoria:Funções, javascript
Tags:
Permalink | Faça um comentário ou um trackback.

3 Comentários

  1. hiran
    Em 11 de março de 2009 às 16:50 | Permalink

    tentei usar o codigo que vc postou acima numa pagina onde ocorreu uma chamada de banco de dados e exibe os imputs com as informações contidas no db… porém, o codigo que vc postou sóexibe a mensagem no primeiro input vazio (mesmo todos estando vazios)… será que vc pode me ajudar .. preciso que exiba a mensagem em todos os inputs vazios…
    obrigado.

  2. Em 11 de março de 2009 às 18:20 | Permalink

    Na página de exemplo, trabalhamos com 3 campos.
    Faça como no exemplo: no final do documento (para q os campos estejam carregados), chame msgIfEmpty para cada campo.

  3. Klawdyo
    Em 17 de junho de 2010 às 19:04 | Permalink

    Com o html5, é só acrescentar o atributo placeholder ao campo. Nos meus testes, só o chrome suportou, por enquanto.

Faça um comentário

Seu email nunca mostrado ou compartilhado. Os campos com * são obrigatórios

*
*