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>
William Kinaan
fuente
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.

Elliot Bonneville
fuente
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.

Jacob Valenta
fuente
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).

Ed Orsi
fuente
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();
Vladimir Djuricic
fuente
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().

JoDev
fuente
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
22
$('#aioConceptName option:selected').val();
nada salvaje
fuente
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();
profimedica
fuente
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>
Ol Sen
fuente
:) 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
10

deberías usar esta sintaxis:

var value = $('#Id :selected').val();

Así que prueba este código:

var values = $('#aioConceptName :selected').val();

Puedes probar en Fiddle: http://jsfiddle.net/PJT6r/9/

ver acerca de esta respuesta en esta publicación

DLMAN
fuente
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'))
});
sanman
fuente
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>

Salman A
fuente
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.

usuario2709153
fuente
7

Solo esto debería funcionar:

var conceptName = $('#aioConceptName').val();
d.popov
fuente
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.
});
Juan j
fuente
4

Puede intentar depurarlo de esta manera:

console.log($('#aioConceptName option:selected').val())
swathi
fuente
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>
mamal
fuente
2

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

var conceptName = $('#aioConceptName').find(":selected").attr('value');
Drodarious
fuente
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">
Haris Sultan
fuente
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.

Satista
fuente
1

Puedes usar $("#drpList").val();

Praveen Patel G
fuente
3
Usted tenía razón; Sin embargo, se relacionó con el texto, la pregunta es incorrecta.
Federico Navarrete el
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;
    }
});
Bludau Media
fuente
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.

Hasnaa Ibraheem
fuente
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 ...

Yusuf Azan
fuente
1

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

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });
Sanjaya
fuente
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!

Werner ZeBeard Bessinger
fuente
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>
Roland
fuente
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()
Hafiz Shehbaz Ali
fuente