Como obter o valor selecionado de uma lista suspensa em JavaScript: análise completa

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Chega de adivinhar: como obter o valor selecionado de um dropdown em JavaScript?

\n\n

Você já se deparou com uma situação em que o usuário seleciona algo em uma lista suspensa no site, mas seu programa não consegue "ver" isso? Familiar, não é? Esta é uma das perguntas mais frequentes no Stack Overflow (e não é à toa!), feita por milhares de desenvolvedores iniciantes e até experientes. Parece simples, não? Mas existem nuances, e hoje vamos analisá-las de uma vez por todas.

\n\n

Neste artigo, mostrarei não apenas uma, mas várias maneiras de obter o valor selecionado de um dropdown em JavaScript puro. Você aprenderá a diferença entre value e selectedIndex, como lidar com o evento de seleção e como não cair na armadilha do multiselect. Vamos lá!

\n\n

A maneira mais simples: a propriedade value

\n\n

Imagine que você tem um select HTML comum:

\n\n
<select id="city">\n  <option value="moscow">Moscou</option>\n  <option value="spb">São Petersburgo</option>\n  <option value="kazan">Cazã</option>\n</select>
\n\n

Para obter o valor selecionado, precisamos fazer apenas duas coisas:

\n\n
    \n
  1. Encontrar o elemento <select> no DOM.
  2. \n
  3. Ler sua propriedade value.
  4. \n
\n\n

Veja como fica no código:

\n\n
const selectElement = document.getElementById('city');\nconst selectedValue = selectElement.value;\n\nconsole.log(selectedValue); // Exibirá, por exemplo, "spb"
\n\n

Importante! A propriedade value do elemento <select> retorna automaticamente o atributo value da <option> atualmente selecionada. Esta é a maneira mais simples e recomendada, se você precisa exatamente do valor, e não do texto.

\n\n

E se precisar obter o texto do item selecionado?

\n\n

Às vezes, precisamos não do valor, mas do que o usuário vê (por exemplo, "Moscou" em vez de "moscow"). Para isso, existe a propriedade textContent (ou innerText) da opção selecionada. Mas primeiro, precisamos obter a própria opção:

\n\n
const selectElement = document.getElementById('city');\nconst selectedOption = selectElement.options[selectElement.selectedIndex];\nconst selectedText = selectedOption.textContent;\n\nconsole.log(selectedText); // Exibirá "Moscou"
\n\n

Aqui usamos selectedIndex — o índice do elemento selecionado (começando em 0). Depois, acessamos a coleção options e pegamos o elemento desejado.

\n\n

Como reagir à mudança de seleção em tempo real?

\n\n

Obter o valor uma vez é bom, mas na maioria das vezes precisamos fazer algo quando o usuário altera a seleção. Para isso, usamos o evento change:

\n\n
const selectElement = document.getElementById('city');\n\nselectElement.addEventListener('change', function() {\n  const selectedValue = selectElement.value;\n  const selectedText = selectElement.options[selectElement.selectedIndex].textContent;\n  \n  console.log('Valor selecionado:', selectedValue);\n  console.log('Texto selecionado:', selectedText);\n});
\n\n

Agora, toda vez que o usuário mudar a cidade na lista suspensa, recebemos instantaneamente os dados atualizados. Prático, não é?

\n\n

Caso especial: multiselects (select com múltipla escolha)

\n\n

E se você tiver uma lista suspensa com seleção múltipla? Por exemplo:

\n\n
<select id="skills" multiple>\n  <option value="html">HTML</option>\n  <option value="css">CSS</option>\n  <option value="js">JavaScript</option>\n</select>
\n\n

Neste caso, selectElement.value retornará apenas o primeiro valor selecionado, e não todos. Para obter todos os itens selecionados, é necessário percorrer a coleção options:

\n\n
const selectElement = document.getEl                

Blogs

Book Recommendations