jQuery Obtenir l'option sélectionnée dans la liste déroulante

1128

Habituellement, j'utilise $("#id").val()pour renvoyer la valeur de l'option sélectionnée, mais cette fois cela ne fonctionne pas. La balise sélectionnée a l'identifiantaioConceptName

Code 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
la source
2
pourriez-vous montrer le balisage de l'élément#aioConceptName
Jorge
2
c'est étrange parce que fonctionne sur cet exemple jsfiddle.net/pAtVP , êtes-vous sûr que l'événement qu'il déclenche dans votre environnement?
Jorge
11
Une pensée tardive, mais .val () ne fonctionnera que si vous définissez l' valueattribut sur ces <option>s, non?
Jacob Valenta
8
Les versions récentes de jQuery (testées avec 1.9.1) n'ont aucun problème avec ce balisage. Pour l'exemple ci-dessus, $("#aioConceptName").val()renvoie choose io.
Salman A

Réponses:

1846

Pour les options déroulantes, vous voulez probablement quelque chose comme ceci:

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

La raison val()ne fait pas l'affaire parce que cliquer sur une option ne change pas la valeur de la liste déroulante - elle ajoute simplement la :selectedpropriété à l'option sélectionnée qui est une enfant de la liste déroulante.

Elliot Bonneville
la source
41
Ah, d'accord, vous avez mis à jour votre question avec HTML. Cette réponse est désormais hors de propos. En fait, cela .val()devrait fonctionner dans votre cas - vous devez avoir une erreur ailleurs.
Elliot Bonneville
13
pour le val()pourquoi ne pas utiliser var conceptVal = $("#aioConceptName option").filter(":selected").val();?
Testeur
61
Que diriez-vous d'une plus simple var conceptVal = $("#aioConceptName option:selected").val()?
Klemen Tušar
5
J'ai toujours trouvé cela utile pour trouver l'option sélectionnée dans une sélection où j'avais précédemment obtenu la liste déroulante - par exemple, var mySelect = $('#mySelect'); / * ... plus de code se produit ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood
18
En fait, la raison pour laquelle .val () ne fonctionne pas pour lui est qu'il n'a pas réellement donné de valeur à ses options, c'est pourquoi il doit utiliser votre méthode pour récupérer le texte sélectionné, donc un autre correctif aurait été de changer <option> choisissez io </option> à <option value = 'choose io'> choisissez io </option> Bien que votre solution soit probablement plus rapide et plus pratique, je me suis dit que je le dirais quand même pour qu'il comprenne mieux pourquoi cela ne fonctionnait pas pour lui.
Jordan LaPrise
342

Définissez les valeurs pour chacune des options

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

$('#aioConceptName').val()n'a pas fonctionné car .val()renvoie l' valueattribut. Pour le faire fonctionner correctement, les valueattributs doivent être définis sur chaque<option> .

Vous pouvez maintenant appeler à la $('#aioConceptName').val()place de tout ce :selectedvaudou suggéré par d'autres.

Jacob Valenta
la source
12
Mise en garde: si aucune option n'est sélectionnée, $('#aioConceptName').val()retourne null / "undefined"
gordon
Cela m'a assuré que $ ('# myselect'). Val () était correct J'avais simplement oublié de donner un id au select!
zzapper
4
L'une de mes options de sélection est une promptoption spéciale <option>Please select an option</option>. Dans mon cas, l'ajout d'un attribut de valeur vide n'a pas posé de problème, <option value="">Please...</option>mais je pense que dans certains cas, l'absence d'attribut de valeur est logique. Mais +1 parce que votre formulation vodoo m'a fait sourire.
Cyril Duchon-Doris
N'est-ce pas val()sélectionner le valueau lieu du texte à l'intérieur du option? C'est à dire qu'il sélectionne 1au lieu de roma.
Deathlock
4
@deathlock C'est tout l'intérêt de .val(). Si vous cherchez à manipuler / utiliser le texte, utilisez $(":selected).text()ou définissez la valeur et le texte de la même manière.
Jacob Valenta
162

Je suis tombé sur cette question et j'ai développé une version plus concise de la réponse d'Elliot BOnneville:

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

ou génériquement:

$('#id :pseudoclass')

Cela vous évite un appel jQuery supplémentaire, sélectionne tout en une seule fois et est plus clair (mon avis).

Ed Orsi
la source
1
@JohnConde La réponse acceptée sur Meta n'est pas d'accord avec vous: meta.stackexchange.com/questions/87678/… . À mon avis, Ed a donné une bonne réponse et vient de fournir une référence supplémentaire.
itsbruce
Ils peuvent le permettre mais c'est toujours une mauvaise ressource
John Conde
1
Suppression du lien w3schools, ce n'était pas strictement nécessaire et une recherche Google sur les "classes pseduo jQuery" fournit de nombreuses informations.
Ed Orsi
@EdOrsi: Bien qu'il enregistre un appel jQuery supplémentaire, il empêche de profiter de l'amélioration des performances fournie par la querySelectorAll()méthode DOM native (voir la documentation jQuery ). Donc, cela devrait être plus lent que la solution d'Eliot .
Alexander Abakumov
Je préférerais probablement l'utiliser .find(':selected')car cela vous permet de l'appeler à partir d'un rappel attaché à un événement ... comme$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest
58

Essayez ceci pour la valeur ...

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

ou ceci pour le texte ...

$("select#id_of_select_element option").filter(":selected").text();
Vladimir Djuricic
la source
49

Si vous êtes dans un contexte d'événement, dans jQuery, vous pouvez récupérer l'élément d'option sélectionné en utilisant:
$(this).find('option:selected')comme ceci:

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

Éditer

Comme mentionné par PossessWithin , Ma réponse répond simplement à la question: Comment sélectionner "Option" sélectionnée.

Ensuite, pour obtenir la valeur de l'option, utilisez option.val().

JoDev
la source
2
Sans défaut! N'oubliez pas que vous devez ajouter $(this).find('option:selected').val()à la fin pour obtenir la valeur de l'élément option ou $(this).find('option:selected').text()pour obtenir le texte. :)
Diego Fortes
22
$('#aioConceptName option:selected').val();
wild_nothing
la source
16

Lecture de la valeur (pas du texte) d'une sélection:

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

Comment désactiver une sélection? dans les deux variantes, la valeur peut être modifiée en utilisant:

UNE

L'utilisateur ne peut pas interagir avec la liste déroulante. Et il ne sait pas quelles autres options pourraient exister.

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

B

L'utilisateur peut voir les options dans la liste déroulante mais toutes sont désactivées:

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

Dans ce cas, $("#Status").val() ne fonctionnera que pour les versions jQuery inférieures à 1.9.0. Toutes les autres variantes fonctionneront.

Comment mettre à jour une sélection désactivée?

Du code derrière vous pouvez toujours mettre à jour la valeur dans votre sélection. Il est désactivé uniquement pour les utilisateurs:

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

Dans certains cas, vous devrez peut-être déclencher des événements:

$("#Status").val(2).change();
profimedica
la source
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
la source
:) la bonne chose est :selected.. val () ou text () ne fonctionne pas correctement sur plusieurs options de sélection, uniquement si un tableau est produit à partir de celui-ci comme map()pourrait le faire.
Ol Sen
10

vous devez utiliser cette syntaxe:

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

Essayez donc ce code:

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

vous pouvez tester dans Fiddle: http://jsfiddle.net/PJT6r/9/

voir à propos de cette réponse dans ce post

DLMAN
la source
9

À l'aide de jQuery, ajoutez simplement un changeévénement et obtenez la valeur ou le texte sélectionné dans ce gestionnaire.

Si vous avez besoin d'un texte sélectionné, veuillez utiliser ce code:

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

Ou si vous avez besoin d'une valeur sélectionnée, veuillez utiliser ce code:

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

Utilisez également la jQuery.val()fonction pour sélectionner des éléments:

La méthode .val () est principalement utilisée pour obtenir les valeurs des éléments de formulaire tels que la saisie, la sélection et la zone de texte. Dans le cas des éléments sélectionnés, il renvoie nulllorsqu'aucune option n'est sélectionnée et un tableau contenant la valeur de chaque option sélectionnée lorsqu'il y en a au moins un et qu'il est possible d'en sélectionner plus car l' multipleattribut est présent.

$(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
la source
8

Pour ceux qui ont découvert la meilleure réponse, cela ne fonctionne pas.

Essayez d'utiliser:

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

Fonctionne pour moi dans des projets récents donc ça vaut le coup d'y regarder.

user2709153
la source
7

Cela devrait fonctionner:

var conceptName = $('#aioConceptName').val();
d.popov
la source
6

Simple et assez simple:

Votre liste déroulante

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

Code Jquery pour obtenir la valeur sélectionnée

$('#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
la source
4

Vous pouvez essayer de le déboguer de cette façon:

console.log($('#aioConceptName option:selected').val())
swathi
la source
4

Pour obtenir la valeur de la balise sélectionnée:

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

Et si vous voulez obtenir du texte, utilisez ce code:

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

Par exemple:

<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
la source
2

Si vous souhaitez récupérer l'attribut 'value' au lieu du nœud de texte, cela fonctionnera pour vous:

var conceptName = $('#aioConceptName').find(":selected").attr('value');
Drodarious
la source
Ce n'est qu'une solution partielle - il est également nécessaire de définir la valeur de chaque option - cela est déjà couvert par la réponse de Jacob Valetta
David
2

essayez celui-ci

$(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
la source
2
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

Imaginez le DDL comme un tableau avec des index, vous sélectionnez un index. Choisissez celui auquel vous souhaitez le configurer avec votre JS.

Satista
la source
1

Vous pouvez utiliser $("#drpList").val();

Praveen Patel G
la source
3
Tu avais raison; cependant, il a fait référence au texte, la question est fausse.
Federico Navarrete
1

pour récupérer une sélection avec le même nom de classe = vous pouvez le faire, pour vérifier si une option de sélection est sélectionnée.

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

J'ai eu le même problème et j'ai compris pourquoi cela ne fonctionnait pas sur mon cas.
La page html a été divisée en différents fragments html et j'ai trouvé que j'avais un autre champ de saisie qui porte le même identifiant du select, ce qui a fait que le val()soit toujours vide
J'espère que cela sauve la mise pour tous ceux qui ont un problème similaire.

Hasnaa Ibraheem
la source
En effet, cela m'a réveillé à mon problème. J'utilisais moi-même qty-field dans la cible de données et .. qty_field dans l'identifiant lui-même. Vérifiez toujours les bases deux fois ou plus.
cdsaenz
1

pour utiliser $ ("# id"). val, vous devez ajouter une valeur à l'option comme ceci:

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

sinon, vous pouvez utiliser

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

Je souhaite que cela aide ..

Yusuf Azan
la source
1

Voici la solution simple à ce problème.

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });
Sanjaya
la source
1
var selectedaioConceptName = $('#aioConceptName option:selected').val();vaut mieux que d'utiliser une autre trouvaille ()
Sadee
0

Votre meilleur pari avec ce type de scénario est probablement d'utiliser la méthode de changement de jQuery pour trouver la valeur actuellement sélectionnée, comme ceci:

$('#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

});

Je préfère cette méthode car vous pouvez ensuite exécuter des fonctions pour chaque option sélectionnée dans un champ de sélection donné.

J'espère que cela pourra aider!

Werner ZeBeard Bessinger
la source
0

Habituellement, vous devez non seulement obtenir la valeur sélectionnée, mais également exécuter une action. Alors pourquoi ne pas éviter toute la magie jQuery et passer simplement la valeur sélectionnée comme argument à l'appel d'action?

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

Vous pouvez sélectionner en utilisant l'option sélectionnée exacte: ci-dessous donnera innerText

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

Alors que ci-dessous vous donnera de la valeur.

$("select#aioConceptName > option:selected").val()
Hafiz Shehbaz Ali
la source