jQuery Obtener la opción seleccionada del menú desplegable


1128

Por lo general, utilizo $("#id").val()para devolver el valor de la opción seleccionada, pero esta vez no funciona. La etiqueta seleccionada tiene la identificaciónaioConceptName

código HTML

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

2
¿podría mostrar el marcado del elemento#aioConceptName
Jorge

2
es extraño porque funciona en este ejemplo jsfiddle.net/pAtVP , ¿estás seguro de que el evento se dispara en tu entorno?
Jorge


11
Un pensamiento tardío, pero .val () no funcionará a menos que establezca el valueatributo en esos <option>s, ¿verdad?
Jacob Valenta

8
Las versiones recientes de jQuery (probadas con 1.9.1) no tienen problemas con este marcado. Para el ejemplo anterior, $("#aioConceptName").val()devuelve choose io.
Salman A

Respuestas:


1846

Para las opciones desplegables, probablemente desee algo como esto:

var conceptName = $('#aioConceptName').find(":selected").text();

La razón por la val()que no funciona es porque hacer clic en una opción no cambia el valor del menú desplegable, solo agrega la :selectedpropiedad a la opción seleccionada, que es un elemento secundario del menú desplegable.


41
Ah, está bien, has actualizado tu pregunta con HTML. Esta respuesta ahora es irrelevante. De hecho, .val()debería funcionar en su caso: debe tener un error en otro lugar.
Elliot Bonneville

13
para el val()por qué no usar var conceptVal = $("#aioConceptName option").filter(":selected").val();?
Probador el

61
¿Qué tal un simple var conceptVal = $("#aioConceptName option:selected").val()?
Klemen Tušar

55
Todavía encontré esto útil para encontrar la opción seleccionada en una selección donde obtuve el menú desplegable anteriormente, por ejemplo, var mySelect = $('#mySelect'); / * ... sucede más código ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood

18
En realidad, la razón por la que .val () no funciona para él es porque en realidad no le dio un valor a sus opciones, por lo que tiene que usar su método para recuperar el texto seleccionado, por lo que otra solución habría sido cambiar <option> elegir io </option> a <option value = 'choose io'> elegir io </option> Aunque su solución es probablemente más rápida y práctica, pensé que lo diría de todos modos para que comprenda mejor por qué no estaba funcionando para él.
Jordan LaPrise

342

Establezca los valores para cada una de las opciones.

<select id="aioConceptName">
    <option value="0">choose io</option>
    <option value="1">roma</option>
    <option value="2">totti</option>
</select>

$('#aioConceptName').val()no funcionó porque .val()devuelve el valueatributo Para que funcione correctamente, los valueatributos deben establecerse en cada uno <option>.

Ahora puede llamar en $('#aioConceptName').val()lugar de que todo este :selectedvudú sea sugerido por otros.


12
Advertencia: si no se selecciona ninguna opción, $('#aioConceptName').val()devuelve nulo / "indefinido"
gordon

Esto me aseguró que $ ('# myselect'). Val () era correcto, ¡me había olvidado tontamente de darle una identificación al selectivo!
zzapper

44
Una de mis opciones seleccionadas es una promptopción especial <option>Please select an option</option>. En mi caso, no fue un problema agregar un atributo de valor en blanco, <option value="">Please...</option>pero creo que en algunos casos no tiene sentido tener un atributo de valor. Pero +1 porque tu redacción de vudú me hizo sonreír.
Cyril Duchon-Doris

¿No se val()selecciona el en valuelugar del texto dentro de option? Es decir, selecciona en 1lugar de roma.
deathlock

44
@deathlock De eso se trata .val(). Si está buscando manipular / usar el texto, use $(":selected).text()o establezca el valor y el texto para que sea el mismo.
Jacob Valenta

162

Me topé con esta pregunta y desarrollé una versión más concisa de la respuesta de Elliot BOnneville:

var conceptName = $('#aioConceptName :selected').text();

o genéricamente:

$('#id :pseudoclass')

Esto le ahorra una llamada jQuery adicional, selecciona todo de una vez y es más claro (mi opinión).


1
@JohnConde La respuesta aceptada en Meta no está de acuerdo con usted: meta.stackexchange.com/questions/87678/… . En mi opinión, Ed dio una buena respuesta y solo proporcionó alguna referencia adicional.
itsbruce 01 de

Pueden permitirlo, pero sigue siendo un mal recurso
John Conde

1
Se eliminó el enlace w3schools, no era estrictamente necesario y una búsqueda en Google de "jQuery pseduo classes" proporciona mucha información.
Ed Orsi

@EdOrsi: si bien ahorra una llamada adicional de jQuery, evita aprovechar el aumento de rendimiento proporcionado por el querySelectorAll()método DOM nativo (consulte los documentos de jQuery ). Entonces, debería ser más lento que la solución de Eliot .
Alexander Abakumov

Probablemente preferiría usarlo, .find(':selected')ya que le permite llamarlo desde una devolución de llamada adjunta a un evento ... como$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest

58

Prueba esto por valor ...

$("select#id_of_select_element option").filter(":selected").val();

o esto para el texto ...

$("select#id_of_select_element option").filter(":selected").text();

49

Si está en contexto de evento, en jQuery, puede recuperar el elemento de opción seleccionado usando:
$(this).find('option:selected')así:

$('dropdown_selector').change(function() {
    //Use $option (with the "$") to see that the variable is a jQuery object
    var $option = $(this).find('option:selected');
    //Added with the EDIT
    var value = $option.val();//to get content of "value" attrib
    var text = $option.text();//to get <option>Text</option> content
});

Editar

Como mencionó PossessWithin , Mi respuesta solo responde a la pregunta: Cómo seleccionar la "Opción" seleccionada.

Luego, para obtener el valor de la opción, use option.val().


2
¡Perfecto! Simplemente no olvide que debe agregar $(this).find('option:selected').val()al final para obtener el valor del elemento de opción o $(this).find('option:selected').text()para obtener el texto. :)
Diego Fortes



16

Lectura del valor (no el texto) de una selección:

var status = $("#Status").val();
var status = $("#Status")[0].value;
var status = $('#Status option:selected').val();

¿Cómo deshabilitar una selección? en ambas variantes, el valor se puede cambiar usando:

UNA

El usuario no puede interactuar con el menú desplegable. Y no sabe qué otras opciones podrían existir.

$('#Status').prop('disabled', true);

si

El usuario puede ver las opciones en el menú desplegable, pero todas están deshabilitadas:

$('#Status option').attr('disabled', true);

En este caso, $("#Status").val() solo funcionará para versiones jQuery más pequeñas que 1.9.0. Todas las demás variantes funcionarán.

¿Cómo actualizar una selección deshabilitada?

Desde el código detrás, aún puede actualizar el valor en su selección. Está deshabilitado solo para usuarios:

$("#Status").val(2);

En algunos casos, es posible que necesite disparar eventos:

$("#Status").val(2).change();

11
<select id="form-s" multiple="multiple">
    <option selected>city1</option>
    <option selected value="c2">city2</option>
    <option value="c3">city3</option>
</select>   
<select id="aioConceptName">
    <option value="s1" selected >choose io</option>
    <option value="s2">roma </option>
    <option value="s3">totti</option>
</select>
<select id="test">
    <option value="s4">paloma</option>
    <option value="s5" selected >foo</option>
    <option value="s6">bar</option>
</select>
<script>
$('select').change(function() {
    var a=$(':selected').text(); // "city1city2choose iofoo"
    var b=$(':selected').val();  // "city1" - selects just first query !
    //but..
    var c=$(':selected').map(function(){ // ["city1","city2","choose io","foo"]
        return $(this).text();
    }); 
    var d=$(':selected').map(function(){ // ["city1","c2","s1","s5"]
        return $(this).val();
    });
    console.log(a,b,c,d);
});
</script>

:) lo bueno es que :selected... val () o text () no funciona correctamente en varias opciones de selección, solo si se produce una matriz como map()podría hacerlo.
Ol Sen


9

Usando jQuery, solo agregue un change evento y obtenga el valor o texto seleccionado dentro de ese controlador.

Si necesita texto seleccionado, utilice este código:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").text())
});

O si necesita un valor seleccionado, utilice este código:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").attr('value'))
});

9

Use la jQuery.val()función para seleccionar elementos también:

El método .val () se usa principalmente para obtener los valores de elementos de formulario como input, select y textarea. En el caso de los elementos seleccionados, regresa nullcuando no se selecciona ninguna opción y una matriz que contiene el valor de cada opción seleccionada cuando hay al menos una y es posible seleccionar más porque el multipleatributo está presente.

$(function() {
  $("#aioConceptName").on("change", function() {
    $("#debug").text($("#aioConceptName").val());
  }).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<select id="aioConceptName">
  <option>choose io</option>
  <option>roma</option>
  <option>totti</option>
</select>
<div id="debug"></div>


8

Para cualquiera que descubrió que la mejor respuesta no funciona.

Tratar de usar:

  $( "#aioConceptName option:selected" ).attr("value");

Funciona para mí en proyectos recientes, por lo que vale la pena mirarlo.


7

Solo esto debería funcionar:

var conceptName = $('#aioConceptName').val();

6

Directo y bastante fácil:

Su menú desplegable

<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

Jquery code para obtener el valor seleccionado

$('#aioConceptName').change(function() {
    var $option = $(this).find('option:selected');

    //Added with the EDIT
    var value = $option.val(); //returns the value of the selected option.
    var text = $option.text(); //returns the text of the selected option.
});

4

Puede intentar depurarlo de esta manera:

console.log($('#aioConceptName option:selected').val())

4

Para obtener el valor de la etiqueta seleccionada:

 $('#id_Of_Parent_Selected_Tag').find(":selected").val();

Y si desea obtener texto, use este código:

 $('#id_Of_Parent_Selected_Tag').find(":selected").text();

Por ejemplo:

<div id="i_am_parent_of_select_tag">
<select>
        <option value="1">CR7</option>
        <option value="2">MESSI</option>
</select>
</div>


<script>
 $('#i_am_parent_of_select_tag').find(":selected").val();//OUTPUT:1 OR 2
 $('#i_am_parent_of_select_tag').find(":selected").text();//OUTPUT:CR7 OR MESSI
</script>

2

Si desea obtener el atributo 'valor' en lugar del nodo de texto, esto funcionará para usted:

var conceptName = $('#aioConceptName').find(":selected").attr('value');

Esto es solo parcialmente una solución, también es necesario establecer el valor para cada opción, esto ya está cubierto por la respuesta de Jacob Valetta
David

2

intenta con este

$(document).ready(function() {

    $("#name option").filter(function() {
        return $(this).val() == $("#firstname").val();
    }).attr('selected', true);

    $("#name").live("change", function() {

        $("#firstname").val($(this).find("option:selected").attr("value"));
    });
});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<select id="name" name="name"> 
<option value="">Please select...</option> 
<option value="Elvis">Elvis</option> 
<option value="Frank">Frank</option> 
<option value="Jim">Jim</option> 
</select>

<input type="text" id="firstname" name="firstname" value="Elvis" readonly="readonly">

2
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

Imagine el DDL como una matriz con índices, está seleccionando un índice. Elija el que desea configurar con su JS.




1

para obtener una selección con la misma clase = nombre, puede hacer esto, para verificar si se selecciona una opción de selección.

var bOK = true;
$('.optKategorien').each(function(index,el){
    if($(el).find(":selected").text() == "") {
        bOK = false;
    }
});

1

Tuve el mismo problema y descubrí por qué no funcionaba en mi caso.
La página html se dividió en diferentes fragmentos html y descubrí que tengo otro campo de entrada que lleva el mismo Id del select, lo que hacía que el val()estuviera siempre vacío.
Espero que esto salve el día para cualquiera que tenga un problema similar.


De hecho, esto me despertó a mi problema. Yo mismo estaba usando qty-field en el objetivo de datos y .. qty_field en la identificación misma. Siempre revise lo básico dos veces o más.
cdsaenz

1

para usar $ ("# id"). val, debe agregar un valor a la opción como esta:

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option value="choose">choose io</option>
</select>

de lo contrario, puede usar

   $("#aioConceptName").find(':selected').text();

Deseo que eso ayude ...


1

Aquí está la solución simple para este problema.

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();es mejor que usar otro find ()
Sadee

0

Probablemente su mejor apuesta con este tipo de escenario es utilizar el método de cambio de jQuery para encontrar el valor seleccionado actualmente, de esta manera:

$('#aioConceptName').change(function(){

   //get the selected val using jQuery's 'this' method and assign to a var
   var selectedVal = $(this).val();

   //perform the rest of your operations using aforementioned var

});

Prefiero este método porque luego puede realizar funciones para cada opción seleccionada en un campo de selección dado.

¡Espero que ayude!


0

Por lo general, necesitaría no solo obtener el valor seleccionado, sino también ejecutar alguna acción. Entonces, ¿por qué no evitar toda la magia jQuery y simplemente pasar el valor seleccionado como argumento a la llamada a la acción?

<select onchange="your_action(this.value)">
   <option value='*'>All</option>
   <option ... />
</select>

0

Puede seleccionar usando la opción exacta seleccionada: a continuación le dará innerText

$("select#aioConceptName > option:selected").text()

Mientras que a continuación le dará valor.

$("select#aioConceptName > option:selected").val()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.