jQuery obtiene el valor de la opción seleccionada (no el texto, sino el atributo 'valor')

156

De acuerdo, tengo este código:

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

Y me gustaría obtener el valor de la opción seleccionada. Ejemplo: se selecciona 'Opción 2' y su valor es '2'. El '2' es el valor que necesito obtener y no la 'Opción 2'.

n00b
fuente
Tutorial de demostración para Getting: freakyjolly.com/… Tutorial de demostración para configurar freakyjolly.com/… Single y Multiple Selectbox
Code Spy

Respuestas:

271

04/2020: respuesta anterior corregida

Usar : selector de psuedo seleccionado en las opciones seleccionadas y luego usar la función .val para obtener el valor de la opción.

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

Nota al margen : usar el filtro es mejor que usar el :selectedselector directamente en la primera consulta.

Si está dentro de un controlador de cambios, puede usar simplemente this.valuepara obtener el valor de la opción seleccionada. Ver demo para más opciones.

//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>

Vieja respuesta:

Editar: como muchos señalaron, esto no devuelve el valor de la opción seleccionada.

~~ Use .val para obtener el valor de la opción seleccionada. Vea abajo,

$('select[name=selector]').val()~~
Selvakumar Arumugam
fuente
55
Haga su prueba:$('select[name=selector]').change(function() { alert($(this).val()); });
KingRider
44
Tenga en cuenta que si la opción seleccionada no tiene un valueatributo especificado, <option>label</option>se devolverá la etiqueta (es decir ). No siempre puede ser lo que quieres. Por supuesto, en la mayoría de las aplicaciones, se especifica el valor.
Czechnology
115

Solo quería compartir mi experiencia

Para mi,

$('#selectorId').val()

devuelto nulo

Tuve que usar

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

David Torres
fuente
1
¿Era ese caso específico del navegador? ¿La versión más reciente de Chrome no lo permitía, o era IE el que no lo soportaba?
Theodor Solbjørg
1
Estaba en la versión más nueva de Chrome. Quizás también en Firefox, pero no estoy seguro.
David Torres
No estoy seguro de por qué $('#selectorId option:selected').val()no funcionó para mí. En cambio, solía$('select option:selected').val()
Francisco Quintero el
1
@Francisco El problema es que $('select option:selected').val()tomará el valor del primer selector en el código HTML. Mientras que con $('#selectorId option:selected').val()usted puede tener el valor del selector que ID especificó. Verifique los errores tipográficos. Aquí hay un ejemplo que muestra lo que acabo de decir: codepen.io/anon/pen/Nqgqyz
David Torres
22
$('select').change(function() {
    console.log($(this).val())
});​

Ejemplo de jsFiddle

.val() obtendrá el valor

j08691
fuente
9

Necesita agregar una identificación a su selección. Luego:
$('#selectorID').val()

Marcus
fuente
Tengo la identificación agregada, solo olvidé agregarla aquí.
n00b
1
Por lo que he leído, usar un ID como selector es el método más rápido.
Marcus
5

Prueba esto:

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

o

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

puedes usar de la jquerysiguiente manera

GUIÓN

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

FIDDLE está aquí

Usman
fuente
2

Para un selecto como este

<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>

... puedes obtener la identificación de esta manera:

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

O puede usar el valor en su lugar y obtenerlo de la manera 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>

Me gusta esto:

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

Una de mis opciones no tienen un valor: <option>-----</option>. Estaba tratando de usar if (!$(this).val()) { .. }pero estaba obteniendo resultados extraños. Resulta que si no tiene un valueatributo en su <option>elemento, devuelve el texto dentro de él en lugar de una cadena vacía. Si no desea val()devolver nada para su opción, asegúrese de agregar value="".

Gavin
fuente
0

Mira el ejemplo:

    <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>
J H_
fuente
0
$('#selectorID').val();

O

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

O

$('.class_nam').val();
Saddam Khan
fuente
@FarhadBagherlo "Seguir escribiendo" no es un comentario de edición útil. Resuma sus cambios, para que los lectores del historial de edición comprendan lo que ha hecho sin inspeccionar cada carácter modificado. ¡Gracias!
jpaugh
0

este código funciona muy bien para mí: devuelve el valor de la opción seleccionada. $ ('# select_id'). find ('opción: selected'). val ();

Abolfazl Miadian
fuente
0
 $(document ).ready(function() {
    $('select[name=selectorname]').change(function() { 
     alert($(this).val());});
 });
Turan Zamanlı
fuente
Si bien este código podría resolver el problema, es mejor agregar elaboración y explicar cómo funciona para las personas que podrían no entender este fragmento de código.
paper1111
@ paper1111 se trata de funciones simples. Puedo explicar si esto es necesario. $ ('select [name = here is select box name]) .change () - function significa que cuando cambiemos la función de opción de cuadro de selección funcionará. $ (this) .val () - devuelve el valor de la opción seleccionada
Turan Zamanlı
0

Enlace fuente

Use jQuery val () para OBTENER el valor seleccionado y y texto () para OBTENER texto de opción.

    <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>

Cambiar evento en el menú desplegable de selección

        $("#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());
        });

Clic de botón

        $("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
fuente