desenvolvimento para web

Melhorando a interação em formulários de busca

Melhorando a interação em formulários de busca

Melhorar a interação do campo de busca de um site permite que as pessoas que usam tal formulário para buscar tenham uma melhor experiência de uso (leia-se: usabilidade). Com pequenos detalhes, um pouquinho de bom-senso e algumas poucas linhas de jQuery, é possível promover efeitos interessante no campo de busca.

Para ficar claro, será abordada a seguinte interação:

O formulário de busca

Um exemplo de um formulário simples de busca, que pode ser usado em “sites reais”, profissionalmente, pode ser do tipo:

<form method="get" action="script.php" name="form" id="form">
    <input type="text" id="form-input" name="form-input" value="Snippets ou Scripts" />
    <input type="submit" id="form-submit" name="form-submit" value="Buscar" />
</form>

Termo pré-definido

A expressão “termo pré-definido” é mais adequada, já que cada site pede um “label” de indicação diferente, conforme as especificações e necessidades deste. Algumas pessoas preferem o termo “Buscar” ou “Procurar” com um botão de label “OK” ou “Vai”; já alguns sites preferem explicitar a função da busca com algo do tipo “Produtos ou Serviços”, acompanhado de um botão com o label “Buscar” (o que é uma abordagem bem interessante).

De uma maneira ou de outra, é preciso definir que termo será esse. Para nosso exemplo, vamos supor que seja um site voltado a desenvolvimento web e o termo pré-definido será “Snippets ou Scripts“. Vamos criar uma expressão regular simples com uma parte do termo pré definido:

patt = new RegExp('Snippets ou');

E por que não colocar a expressão inteira? Também poderia ser feito, mas o “esforço” para identificar o padrão aumenta em relação ao tamanho/complexidade da mesma. Sinta-se à vontade para fazer vários testes.

Melhorando a interação do formulário de busca

A melhora da interação se de duas formas:

Interação com o campo

Segundo o planejamento, o que se pretende é “Quando o campo recebe o foco, caso tenha o termo pré-definido, é limpo para a pessoa escrever o que pretende”. A lógica é testar a expressão regular: caso o teste seja positivo, o campo é limpo e recebe o foco para a pessoa escrever. Ao perder o foco, “se o conteúdo for o mesmo do termo pré-definido (ou em branco), este termo reaparece”.

$('#form-input')
.focus(function(){
    if (patt.test($(this).val()))
    {
        $(this).val('');
    }
})
.blur(function(){
    if ($(this).val() == '')
    {
        $(this).val('Snippets ou Scripts');
    }
});

Interação com o botão

A interação com o botão também é importante – e, infelizmente, é um ponto esquecido por muitos desenvolvedores. A ideia é, ao se clicar no botão, testar se a expressão “bate” ou o campo está em branco e, caso seja um desses casos, dar o foco no campo.

$('#form-submit').click(function(){
    if ((patt.test($('#form-input').val())) || ($('#form-input').val() == ''))
    {
        $('#busca-bottom').focus();
        return false; // Impede que o form seja submetido
    }
});

Não é necessário dar a instrução de limpar o campo no foco porque a peça de script anterior, sobre a interação com o campo, já faz isso.

JavaScript final

Juntando os pedaços de códigos, já devidamente explicados, tem-se o seguinte:

$('#form-input')
.focus(function(){
    if (patt.test($(this).val()))
    {
        $(this).val('');
    }
})
.blur(function(){
    if ($(this).val() == '')
    {
        $(this).val('Snippets ou Scripts');
    }
});
 
$('#form-submit').click(function(){
    if ((patt.test($('#form-input').val())) || ($('#form-input').val() == ''))
    {
        $('#busca-bottom').focus();
        return false; // Impede que o form seja submetido
    }
});

Conclusão sobre a melhora da interação em formulários de busca

Certamente essas não são as únicas melhorias cabíveis para a melhoria de usabilidade e interação de um formulário de busca simples, mas, certamente, são 2 medidas muito bem-vindas para que a experiência e “agradabilidade” sejam melhoradas.

Poderia haver, por exemplo, uma tooltip com o que se pode encontrar no site e/ou fornecendo algum exemplo de termo; implementar uma solução de autocomplete; ou, ao invés de limpar o campo, apenas selecionar todo o termo para, já digitação, substituí-lo pelo o que está sendo digitado. Depende da necessidade do projeto.

E você, tem alguma dica ou solução interessante para melhorar a interação em formulários de busca?

4 interações em "Melhorando a interação em formulários de busca"

  1. otimizar site04/08/2010 

    Boa dica esta que voce postou estava a procura desta informaçao, parabens.

  2. Anderson04/08/2010 

    Muito bom o tutorial ( :

    agora com o HTML 5 este pré definido ficou mais fácil de ser colocado

    basta adicionar o atributo [ placeholder=O que deseja pré definir ] que ele funciona :) claro que isso em navegadores que dão suporte :X

  3. Acelio20/08/2010 

    A jQuery é uma "mão na roda" mesmo.

    Tenho usado ela na maioria dos projetos. Está virando quase um padrão. É praticamente um plugin, só que carrega na hora.

    Sugestões

    Dar um "trim" ou algo para eliminar os espaços em branco antes e depois da string e não deixar o form submeter se só houver espaço em branco. Também para quando só há um caracter.

    Ter um "autocomplete" é o ideal. Usando, por exemplo, os termos mais buscados, as suas tags, suas categorias, e alguns termos pré-definidos que mostrem algum conteúdo.

    É muito chato fazer uma busca e retornar somente "conteúdo não encontrado".

    Muitas vezes isto acontece mesmo quando o conteúdo existe. Ou quando se usa as próprias opções de combos e radioButtons oferecidas na hora da busca. É uma lástima.

    - – - – - – -

    Só a título de curiosidade:

    Pra quem não está usando a jQuery no seu projeto, não precisa carregar 72KB só para fazer isto.

    Dá pra criar uma função javascript simples, ou até usar funções dentro das ações dos próprios elementos do form.

    Dentro do contexto deste exemplo, faz a mesma coisa.

    na tag form

    - testa a variável antes de enviar, e retorna o foco ao campo, caso seja inválida

    <code>

    onsubmit="if(document.forms[0].senha.value=='Snippets ou Scripts' || document.forms[0].senha.value==''){document.forms[0].senha.focus();return false;}"

    </code>

    no input type="text"

    - apaga o termo padrão quando em foco, e se estiver em branco, retorna o termo quando em "blur"

    <code>

    value="Snippets ou Scripts" onfocus="if(document.forms[0].senha.value=='Snippets ou Scripts'){document.forms[0].senha.value='';}" onblur="if(document.forms[0].senha.value==''){document.forms[0].senha.value='Snippets ou Scripts';}"

    </code>

    Obs.: Não sei programar em javascript. Pode ter algo mais simples ou algo mais "correto" a fazer

  4. Tárcio Zemel26/08/2010 

    @ otimizar site

    Obrigado e apareça!

    @ Anderson

    Exatamente. E, enquanto o HTML5 não é uma "W3C oficial", o plugin jQuery.html5form pode ser bem útil!

    @Acelio

    Concordo que, para projetos mais simples/menores, não há necessidade de usar a jQuery. Dependendo, usar somente o Sizzle já resolve.

    Comente!

    O minimalismo não se refere diretamente ao conceito de "pouco", e sim de ampliar a essência do que realmente é importante.

    Ludwig Mies Van der Rohe
    Quer ganhar 1 ano grátis da Conta Negócios Basekit, uma das melhores ferramentas de criar sites do mundo? Saiba como!