Botões, tabelas e eventos

Ampliamos o exemplo anterior para que o texto dos botões possa ser editado facilmente, sem perder na apresentação.
Publicado em: 28/9/06

Valorize este artigo:
Para resolver o problema do multi-idioma o ideal seria contar com o botão tal que o texto que apareça nele seja acessível mediante variáveis de servidor, ou seja, que tenhamos sua estrutura de botão fixa, porém que possamos configurar seu conteúdo segundo nossas necessidades.

Se nos baseamos no que foi estudado até agora, podemos usar a tabela-botão que havíamos construído, introduzindo em sua célula central um texto, ao invés de um botão padrão com estilos. O problema a partir daqui será dobrado:

1. Capturar o evento CLICK na tabela, de tal forma que quando o usuário clique sobre qualquer parte dela o formulário seja enviado.

2. Capturar o evento da tecla Enter, para que se mantenha a funcionalidade típica dos botões.

Este segundo problema foi resolvido anteriormente, e quanto ao primeiro, basta aproveitar que o Internet Explorer e Netscape 6x suportam os eventos no elemento table. E como Netscape 4x não os suporta, incluímos em texto de botão dentro de um link, para que o resultado final seja de certa forma compatível com todos os navegadores. O código final necessário será do tipo:

<html>
<head>
  <title>HTMLWeb. WebScript. Design. Botões com estilo.</title>
  <style type="text/css">
    .link,.link:hover{font-size:10px;font-family:Verdana,Helvetica;font-weight:bold;color:white;text-decoration:none;cursor:default;}
    .tabelaBotao{cursor:default;}
  </style>
  <script language="JavaScript" type="text/javascript">
    var contador=false;
    /**
    * funcion demo do evento onclick na tabela
    */
    function envia()
    {
      if(contador==false)
          document.forms[0].submit();
    }
    function envia2()
    {
      document.forms[0].submit();
      setTimeout("contador=false",500);
    }
    /**
    * funcao de captura de clique de tecla em Internet Explorer
    */
    var tecla;
    function capturaTecla(e)
    {
        if(document.all)
            tecla=event.keyCode;
        else
        {
            tecla=e.which;
        }
     if(tecla==13)
        {
            document.forms[0].submit();
        }
    } 
    document.onkeydown = capturaTecla;
</script>
</head>
<body>
<div align="center">
  <form name="form1" action="http://www.yahoo.com" target="_blank" method="post">
    <input type="text" name="prova">
  </form>
</div>
<table class="tabelaBotao" cellpadding="0" cellspacing="0" border="0" align="center" onclick="envia()">
  <tr>
    <td rowspan="3" width="5" height="19"><img src="images/curva_azul_izq.gif" width="5" height="19" border="0" alt=""></td>
    <td height= "1" width="70" bgcolor="#638cb5"><img src="images/bs.gif" width="1" height="1" border="0" alt=""></td>
    <td rowspan="3" align="right" width="5" height="19"><img src="images/curva_azul_der.gif" width="5" height="19" border="0" alt=""></td>
  </tr>
  <tr align="center">
    <td height= "17" bgcolor="#638cb5"><a href= "#"onclick="contador=true;envia2();return false" class="link">enviar</a></td>
  </tr>
  <tr>
    <td height= "1" width="70" bgcolor="#638cb5"><img src="images/bs.gif" width="1" height="1" border="0" alt=""></td>
  </tr>
</table>
</body>
</html>

Cujo resultado é o seguinte:

enviar

Notem como foi estabelecida duas funções diferentes, envia() e envia2(), uma chamada desde o link e outra desde o evento onclick da tabela, e uma variável booleana, contador. O objetivo é que ao clicar sobre "enviar" não se enviem duas vezes os dados do formulário (já que o texto está dentro do link e dentro da tabela).

A grande vantagem que apresenta este botão fictício é que é "quase" compatível com todos os navegadores, é totalmente configurável por nós mesmos e suporta acesso ao texto que deve aparecer no botão, com o que é ideal para aplicações multi-linguagem, nas quais o texto deve depender do idioma escolhido pelo usuário.

Conclusão

Como vocês podem ver, usando a imaginação e as ferramentas simples que dispomos, é fácil converter elementos "insossos" de nossas páginas em partes importantes do design das mesmas. Sempre existe alguma solução às nossas necessidades de desenho, e para encontra-la basta liberar nossa mente e deixar nossas idéias fluírem.



Informe de Luciano Moreno



Usuários :    login / registro
Manuais relacionados
Categorias relacionadas

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