Select dinâmico

Comments

No dia 03/09/2005, publiquei uma introdução ao Ajax. Como dei uma rápida passada nos assuntos principais, como DOM e o XMLHttpRequest, resolvi que era a hora de mostrar mais exemplos práticos, de situações corriqueiras ou interessantes, onde você pode usar Ajax e a biblioteca CPAINT.

Então, vou ensinar como mudar os valores de um <select>, também chamado de combobox ou menu drop-down. E em um próximo artigo, como esses valores podem ser trocados por um retorno XML do Ajax.

Em essência, trocar os valores de um <select> exige apenas um loop sobre uma matriz de Javascript. No próprio aplicativo no servidor, poderíamos construir essa lista pegando valores no banco de dados e mostrando dentro do <head> do documento. Entretanto, vamos imaginar que essa lista mudaria com outras ações do usuário na página, por exemplo, uma seleção de itens para um carrinho de compras. Assim, não iríamos querer a página inteira sendo recarregada.

Como mudar um <select>

Em Javascript, a matriz retornada por document.forms[formulario][select_nome].options consegue acessar as opções do <select>. A primeira opção está localizada em document.forms[formulario][select_nome].options[0], e a segunda está em document.forms[formulario][select_nome].options[1] e assim sucessivamente.

Para especificar um valor, usamos new Option();, que aceita dois argumentos. O primeiro é texto da opção, e o segundo (opcional), o valor dela.

Então, se quisessemos colocar duas opções em um <select> chamado exemplo de um formulário chamado formulario, faríamos:

JavaScript:
  1. document.forms[formulario][exemplo].options[0] = new Option("Primeira opção", 1);
  2. document.forms[formulario][exemplo].options[1] = new Option("Segunda opção", 2);

Em HTML, isso é o equivalente de usarmos:

HTML:
  1. <select name="exemplo">
  2.   <option value="1">Primeira opção</option>
  3.   <option value="2">Segunda opção</option>
  4. </select>

Deixe-me mostrá-lo um exemplo completo, com dois botões do tipo radio. O primeiro, quando clicado, mudará o valor do <select> para números, e o segundo, para o cardinal.

HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Select dinâmico</title>
  4.     <script type="text/javascript">
  5.       numero_lista = new Array("1", "2", "3");
  6.       cardinal_lista = new Array("Primeiro", "Segundo", "Terceiro");
  7.  
  8.       function trocarSelect(formulario_nome, select_nome, lista_nome)
  9.       {
  10.           if (lista_nome == "numero") {
  11.               var lista = numero_lista;
  12.           } else {
  13.               var lista = cardinal_lista;
  14.           }
  15.  
  16.           var select_alvo = document.forms[formulario_nome][select_nome];   
  17.           select_alvo.options.length = 0;
  18.           for (i = 0; i <lista.length; i++) {
  19.               var nome_opcao = lista[i];
  20.               select_alvo.options[i] = new Option(nome_opcao);
  21.           }
  22.       }
  23.     </script>
  24.   </script></head>
  25.     <form name="formulario_de_exemplo" method="post" action="exemplo.php">
  26.       <p>
  27.         Transforme o select em <input type="radio" name="exemplo" value="numero" onClick="trocarSelect('formulario_de_exemplo', 'selecao', 'numero');" /> número ou em <input type="radio" name="exemplo" value="cardinal" onClick="trocarSelect('formulario_de_exemplo', 'selecao', 'cardinal');" /> cardinal.
  28.       <br />
  29.       <select name="selecao">
  30.         <option value="vazio">Clique em um botão radio qualquer</option>
  31.       </select>
  32.       </p>
  33.     </form>
  34.   </body>
  35. </html>

Em breve, publicarei outro artigo sobre montar a matriz de novos valores para o <select> com o XML retornado pelo Ajax.

  • Levi
    Nessa operação eu posso ter como resultado do select 1, 2, 3 ou primeiro, segundo, terceiro.
    Como faço para gravar no banco de dados o resultado que eu selecionar?
blog comments powered by Disqus

Português flagItaliano flagCoreano flagChinês (simplificado) flagEnglish flagAlemâo flagFrancês flagEspanhol flag
Japonês flagÁrabe flagRusso flagHolandês flagBúlgaro flagTcheco flagCroata flagDinamarquês flag
Finlandês flagHindu flagPolonês flagRomeno flagSueco flagGrego flagNorueguês flag 
By N2H
96 DOLETAS de desconto na hospedagem Dreamhost!
Use o "PROMO CODE" INERCIA. LAMP com 20GB de espaço e 1TB de transferência.

Artigos relacionados

  • No Related Posts

Categories