jQuery obtém o valor da opção selecionada (não o texto, mas o atributo 'valor')

156

Ok, eu tenho este código:

<select name="selector" id="selector">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>

E eu gostaria de obter o valor da opção selecionada. Exemplo: 'Opção 2' está selecionada e o valor é '2'. O '2' é o valor que eu preciso obter e não a 'Opção 2'.

n00b
fonte
Tutorial de demonstração para Getting: freakyjolly.com/… Tutorial de demonstração para Setting freakyjolly.com/… Selectbox único e múltiplo
Code Spy

Respostas:

271

04/2020: resposta antiga corrigida

Use : seletor psuedo selecionado nas opções selecionadas e use a função .val para obter o valor da opção.

$('select[name=selector] option').filter(':selected').val()

Nota lateral : Usar o filtro é melhor do que usar o :selectedseletor diretamente na primeira consulta.

Se estiver dentro de um manipulador de alterações, você pode usar simplesmente this.valuepara obter o valor da opção selecionada. Veja a demonstração para mais opções.

//ways to retrieve selected option and text outside handler
console.log('Selected option value ' + $('select option').filter(':selected').val()); 
console.log('Selected option value ' + $('select option').filter(':selected').text());

$('select').on('change', function () {
  //ways to retrieve selected option and text outside handler
  console.log('Changed option value ' + this.value);
  console.log('Changed option text ' + $(this).find('option').filter(':selected').text());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<select>
  <option value="1" selected>1 - Text</option>
  <option value="2">2 - Text</option>
  <option value="3">3 - Text</option>
  <option value="4">4 - Text</option>
</select>

Resposta antiga:

Editar: Como muitos apontaram, isso não retorna o valor da opção selecionada.

~~ Use .val para obter o valor da opção selecionada. Ver abaixo,

$('select[name=selector]').val()~~
Selvakumar Arumugam
fonte
5
Faça o teste de ur:$('select[name=selector]').change(function() { alert($(this).val()); });
KingRider
4
Observe que se a opção selecionada não tiver nenhum valueatributo especificado, o rótulo (ou seja <option>label</option>) será retornado. Nem sempre pode ser o que você deseja. Obviamente, na maioria dos aplicativos, o valor é especificado.
Czechnology
115

Eu só queria compartilhar minha experiência

Para mim,

$('#selectorId').val()

retornado nulo.

Eu tive que usar

$('#selectorId option:selected').val()

David Torres
fonte
1
Esse caso foi específico do navegador? A versão mais recente do chrome não permitiu, ou foi o IE que não deu suporte?
Theodor Solbjørg 10/03
1
Estava na versão mais recente do Chrome. Talvez também no Firefox, mas não tenho certeza.
David Torres
Não sei por $('#selectorId option:selected').val()que não funcionou para mim. Em vez disso, eu usei$('select option:selected').val()
Francisco Quintero
1
@Francisco O problema é que $('select option:selected').val()assumirá o valor do primeiro seletor no código HTML. Considerando que $('#selectorId option:selected').val()você pode ter o valor do seletor que identificou. Verifique novamente se há erros de digitação. Aqui está um exemplo que mostra o que eu disse: codepen.io/anon/pen/Nqgqyz
David Torres
22
$('select').change(function() {
    console.log($(this).val())
});​

Exemplo de jsFiddle

.val() receberá o valor.

j08691
fonte
9

Você precisa adicionar um ID à sua seleção. Então:
$('#selectorID').val()

Marcus
fonte
Eu tenho o id adicionado, apenas esqueci de adicioná-lo aqui.
N00b
1
Pelo que li usando um ID como seletor, é o método mais rápido.
Marcus
5

Tente o seguinte:

$(document).ready(function(){
    var data= $('select').find('option:selected').val();
});

ou

var data= $('select').find('option:selected').text();
Payal Mittal
fonte
4

você pode usar da jqueryseguinte maneira

ROTEIRO

  $('#IDOfyourdropdown').change(function(){
    alert($(this).val());
  });

FIDDLE está aqui

Usman
fonte
2

Para uma seleção como esta

<select class="btn btn-info pull-right" id="list-name" style="width: auto;">
   <option id="0">CHOOSE AN OPTION</option>
   <option id="127">John Doe</option>
   <option id="129" selected>Jane Doe</option>

... você pode obter o ID desta maneira:

$('#list-name option:selected').attr('id');

Ou você pode usar o valor e obtê-lo da maneira mais fácil ...

<select class="btn btn-info pull-right" id="list-name" style="width: auto;">
   <option value="0">CHOOSE AN OPTION</option>
   <option value="127">John Doe</option>
   <option value="129" selected>Jane Doe</option>

como isso:

$('#list-name').val();
Geziel Carvalho
fonte
2

Uma das minhas opções não ter um valor: <option>-----</option>. Eu estava tentando usar, if (!$(this).val()) { .. }mas estava obtendo resultados estranhos. Acontece que, se você não tiver um valueatributo em seu <option>elemento, ele retornará o texto dentro dele, em vez de uma sequência vazia. Se você não deseja val()retornar nada para sua opção, adicione-o value="".

Gavin
fonte
0

Olhe para o exemplo:

    <select class="element select small" id="account_name" name="account_name"> 

        <option value="" selected="selected">Please Select</option>           
        <option value="paypal" >Paypal</option>
        <option value="webmoney" >Webmoney</option>

    </select>

 <script type="text/javascript">

        $(document).ready(function(){ 
             $('#account_name').change(function(){
               alert($(this).val());                                                          
             });
        });
 </script>
JH_
fonte
0
$('#selectorID').val();

OU

$('select[name=selector]').val();

OU

$('.class_nam').val();
Saddam Khan
fonte
@FarhadBagherlo "Continue digitando" não é um comentário útil para edição! Resuma suas alterações, para que os leitores do histórico de edições entendam o que você fez sem inspecionar todos os caracteres alterados. Obrigado!
jpaugh
0

esse código funciona muito bem para mim: isso retorna o valor da opção selecionada. $ ('# select_id'). find ('opção: selecionada'). val ();

Abolfazl Miadian
fonte
0
 $(document ).ready(function() {
    $('select[name=selectorname]').change(function() { 
     alert($(this).val());});
 });
Turan Zamanlı
fonte
Embora esse código possa resolver o problema, é melhor adicionar elaboração e explicar como funciona para pessoas que podem não entender esse trecho de código.
precisa saber é o seguinte
@ paper1111 são funções simples. Eu posso explicar se isso é necessário. $ ('select [nome = aqui é o nome da caixa de seleção]) .change () - função significa que, quando mudarmos, a opção de opção da caixa de seleção funcionará. $ (this) .val () - lo retornar o valor da opção selecionada
Turan Zamanlı
0

Link de origem

Use jQuery val () para GET Valor e e selecionada de texto () para GET Opção de texto.

    <select id="myDropDown" class="form-control">
        <option value="0">Select Value 0</option>
        <option value="8">Option value 8</option>
        <option value="5">Option value 5</option>
        <option value="4">Option value 4</option>
    </select>

Alterar evento no menu suspenso Selecionar

        $("#myDropDown").change(function () {

            // Fetching Value
            console.log($(this).val());

            // Fetching Text
            console.log($(this).find('option:selected').text());

            alert('Value: '+$(this).val()+' | Text: '+$(this).find('option:selected').text());
        });

Clique no botão

        $("button").click(function () {

        // Fetching Value
            console.log($("#myDropDown").val());

    // Fetching Text
            console.log($('#myDropDown option:selected').text());

            alert('Value: '+$("#myDropDown").val()+' | Text: '+$('#myDropDown option:selected').text());
        });
Code Spy
fonte