Obtenha o valor / texto selecionado em Selecionar na alteração

102
<select onchange="test()" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
</select>

Preciso obter o valor da opção selecionada em javascript: alguém sabe como obter o valor ou texto selecionado, por favor diga como escrever uma função para ele. Atribuí a função onchange () para selecionar, então o que devo fazer depois disso?

Siva
fonte
1
Se você deseja apenas o valuedo optionque foi selecionado, então ... <select onchange="window.alert(this.value);">... options ... </select>... deve obter apenas isso e nada mais.
S0AndS0

Respostas:

121

Use JavaScript ou jQuery para isso.

Usando JavaScript

<script>
function val() {
    d = document.getElementById("select_id").value;
    alert(d);
}
</script>

<select onchange="val()" id="select_id">

Usando jQuery

$('#select_id').change(function(){
    alert($(this).val());
})
Hussein
fonte
.value () funciona em navegadores modernos, mas não em navegadores realmente antigos. Consulte bytes.com/topic/javascript/answers/…
Benissimo
2
@PlayHardGoPro Esse é o valor selecionado. Se você quisesse o texto (por exemplo, -Selecionar- ou Comunicação), você usaria texto: select.textou em jQuery select.text().
ricksmt
Faltando um ponto e vírgula no final do jquery lá ... :)
lindhe
Usando jQuery $('#select_id option:selected').text().Isso irá retornar o texto da opção selecionada, Selecionar ou Comunicação
Paulo Borralho Martins
1
abordagem de javascript vanilla: document.getElementById("select_id").onchange = (evt) => { console.log(evt.srcElement.value); }
Spencer
48

Se você estiver pesquisando sobre isso e não quiser que o ouvinte de evento seja um atributo, use:

document.getElementById('my-select').addEventListener('change', function() {
  console.log('You selected: ', this.value);
});
<select id="my-select">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

Brandon G
fonte
33

function test(a) {
    var x = (a.value || a.options[a.selectedIndex].value);  //crossbrowser solution =)
    alert(x);
}
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>

el Dude
fonte
para que serve a.value? Existe algum navegador que realmente suporte tal? não podemos apenas usar a.options[a.selectedIndex].value?
Anônimo
@Anonymous <para obter o subj =)
el Dude
28

Não há necessidade de uma função onchange. Você pode pegar o valor em uma linha:

document.getElementById("select_id").options[document.getElementById("select_id").selectedIndex].value;

Ou divida-o para melhor legibilidade:

var select_id = document.getElementById("select_id");

select_id.options[select_id.selectedIndex].value;
Danny
fonte
24

Uau, nenhuma solução realmente reutilizável entre as respostas ainda. Quer dizer, um manipulador de eventos padrão deve receber apenas um eventargumento e não precisa usar ids. Eu usaria:

function handleSelectChange(event) {

    // if you want to support some really old IEs, add
    // event = event || window.event;

    var selectElement = event.target;

    var value = selectElement.value;
    // to support really old browsers, you may use
    // selectElement.value || selectElement.options[selectElement.selectedIndex].value;
    // like el Dude has suggested

    // do whatever you want with value
}

Você pode usar este manipulador com cada - js inline:

<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>

jQuery:

jQuery('#select_id').on('change',handleSelectChange);

ou configuração do manipulador JS vanilla:

var selector = document.getElementById("select_id");
selector.onchange = handleSelectChange;
// or
selector.addEventListener('change', handleSelectChange);

E não tem que reescrever isso para cada select elemento que você possui.

Snippet de exemplo:

function handleSelectChange(event) {

    var selectElement = event.target;
    var value = selectElement.value;
    alert(value);
}
<select onchange="handleSelectChange(event)">
    <option value="1">one</option>
    <option value="2">two</option>
</select>

YakovL
fonte
2
Ótima solução, deve ser aceita. Usar o elemento de evento puro, sem fazer referência ao documento DOM, é a maneira mais flexível que funciona em muitos ambientes como React, Vue ou apenas formulários HTML simples.
VanDavv
8
let dropdown = document.querySelector('select');
if (dropdown) dropdown.addEventListener('change', function(event) {
    console.log(event.target.value);
});
Russell Strauss
fonte
Essa abordagem é útil se você estiver trabalhando com funções de seta.
Franchy de
qualquer função de seta pode ser substituída por function () {}, é a mesma coisa
Russell Strauss,
não é o mesmo. thisem uma seta, a função obtém seu contexto de seu ambiente lexical, mas a função normal tem seu próprio this. Verifique isto
Franchy
6

Usar

document.getElementById("select_id").selectedIndex

Ou para obter o valor:

document.getElementById("select_id").value
CloudyMarble
fonte
esta forma de obter o valor não funcionará em navegadores antigos, use a solução de Danny
wlf
6

HTML:

<select onchange="cityChanged(this.value)">
      <option value="CHICAGO">Chicago</option>
      <option value="NEWYORK">New York</option>
</select>

JS:

function cityChanged(city) {
    alert(city);
}
Alexandre
fonte
5
<script>
function test(a) {
    var x = a.selectedIndex;
    alert(x);
}
</script>
<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2">Communication</option>
    <option value="3">Communication</option>
</select>

no alerta você verá o valor INT do índice selecionado, trate a seleção como um array e você obterá o valor

MiPnamic
fonte
4

Pergunto-me que toda a gente tem publicado sobre valuee textopção para começar a partir <option>e ninguém sugeriu label.

Portanto, estou sugerindo labeltambém, pois é compatível com todos os navegadores

Para obter value(igual a outros sugeridos)

function test(a) {
var x = a.options[a.selectedIndex].value;
alert(x);
}

Para obter option text(ou seja, comunicação ou -Selecionar-)

function test(a) {
var x = a.options[a.selectedIndex].text;
alert(x);
}

OU (nova sugestão)

function test(a) {
var x = a.options[a.selectedIndex].label;
alert(x);
}

HTML

<select onchange="test(this)" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
    <option value="2" label=‘newText’>Communication</option>
</select>

Nota: No HTML acima para o optionvalor 2, labelretornará newText em vez de Communication

Além disso

Nota: Não é possível definir a propriedade label no Firefox (somente retorno).

Surjit SD
fonte
3

Esta é uma pergunta antiga, mas não tenho certeza por que as pessoas não sugeriram usar o objeto de evento para recuperar as informações em vez de pesquisar no DOM novamente.

Basta percorrer o objeto de evento em sua função onChange, veja o exemplo abaixo

function test() { console.log(event.srcElement.value); }

http://jsfiddle.net/Corsico/3yvh9wc6/5/

Pode ser útil para as pessoas que procuram isso hoje, se esse não fosse o comportamento padrão há 7 anos

Vlad Pintea
fonte
2

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>

Samzna
fonte
1

jquery

    $('#select_id').change(function(){
    // selected value 
    alert($(this).val());
    // selected text 
    alert($(this).find("option:selected").text());
})

html

<select onchange="test()" id="select_id">
    <option value="0">-Select-</option>
    <option value="1">Communication</option>
</select>
Mohammad Ali Abdullah
fonte
0

function test(){
  var sel1 = document.getElementById("select_id");
  var strUser1 = sel1.options[sel1.selectedIndex].value;
  console.log(strUser1);
  alert(strUser1);
  // Inorder to get the Test as value i.e "Communication"
  var sel2 = document.getElementById("select_id");
  var strUser2 = sel2.options[sel2.selectedIndex].text;
  console.log(strUser2);
  alert(strUser2);
}
<select onchange="test()" id="select_id">
  <option value="0">-Select-</option>
  <option value="1">Communication</option>
</select>

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;
Vishnu S Babu
fonte
-1

Tentei explicar com meu próprio exemplo, mas espero que ajude você. Você não precisa de onchange = "test ()" Execute o snippet de código para obter um resultado ao vivo.

document.getElementById("cars").addEventListener("change", displayCar);

function displayCar() {
  var selected_value = document.getElementById("cars").value;
  alert(selected_value);
}
<select id="cars">
  <option value="bmw">BMW</option>
  <option value="mercedes">Mercedes</option>
  <option value="volkswagen">Volkswagen</option>
  <option value="audi">Audi</option>
</select>

Ayaz
fonte
A mudança é muito melhor do que um evento de clique, pois não é canceroso selecionar uma opção.
Riley Carney
@RileyCarney bem, depende, em vez de alterar o código de refatoração na parte ui sobre a alteração do nome da função na parte js, é mais elegante e, aliás, não vi nenhum evento de clique.
Você o editou para remover o evento onclick haha. Tão sombrio, antes você estava fazendo um clique que fazia a notificação se você clicasse nele para o carro. edited 7 hours agoPelo menos você consertou o código que não funcionou bem.
Riley Carney