jQuery pour récupérer et définir la valeur de l'option sélectionnée de l'élément de sélection html


126

J'essaie de récupérer et de définir la valeur sélectionnée d'un élément de sélection (liste déroulante) avec jQuery.

pour récupérer j'ai essayé $("#myId").find(':selected').val(), ainsi que $("#myId").val()mais les deux renvoient undefined.

Tout aperçu de ce problème serait très apprécié.


si vous utilisez asp .net, leur identifiant peut ne pas être le même une fois rendu!
Rigobert Song

Réponses:


154

La façon dont vous l'avez est correcte pour le moment. Soit l'identifiant du select n'est pas ce que vous dites, soit vous rencontrez des problèmes dans le dom.

Vérifiez l'identifiant de l'élément et vérifiez également que votre balisage est validé ici au W3c.

Sans un dom valide, jQuery ne peut pas fonctionner correctement avec les sélecteurs.

Si les identifiants sont corrects et que votre dom valide, les conditions suivantes s'appliquent:

Pour lire, sélectionnez la valeur de l'option

$('#selectId').val();

Pour définir la valeur de l'option de sélection

$('#selectId').val('newValue');

Pour lire le texte sélectionné

$('#selectId>option:selected').text();

@ Html.DropDownList ("CoinTypes", (SelectList) ViewBag.RequiredLevel, new {@class = "form-control", @ style = "height: 21px; margin-top: 5px;"}) mais $ ('# CoinTypes ') .val (@ ViewBag.CoinType); ne sélectionne pas
Nithin Paul

@NithinPaul pas vraiment un commentaire, posez une question qui montre du html afin que quelqu'un puisse réellement essayer de comprendre ce qui ne va pas. Je ne sais pas comment vous pouvez vous attendre à ce que quelqu'un le travaille à partir de certains formulaires Web / code mvc!
redsquare

248

pour obtenir / définir la propriété selectedIndex réelle de l'élément select, utilisez:

$("#select-id").prop("selectedIndex");

$("#select-id").prop("selectedIndex",1);

19
Il est important de noter que la fonctionnalité prop () a été implémentée dans la version 1.6, donc les versions précédentes n'ont pas cette fonctionnalité.
RobB

18
J'aime cette réponse car elle répond en fait à la question de l'accès à l'index, pas seulement à la valeur.
Pablo Diaz

4
oui. Je pensais que c'était la question initiale.
Jack Holt

Vous pourriez probablement aussi utiliser attr avec la même syntaxe et être d'accord.
Yitzhak

7
@ M.YitzhakSamuel .attr()et .prop()ne le sont pas non plus. Cela fonctionnera dans certains cas où un attribut est également une propriété, par exemple .attr('id')est égal à .prop('id'). Dans ce cas, .prop('selectedIndex')est égal à .get(0).selectedIndex.
WynandB

7

$('#myId').val() devrait le faire, faute de quoi j'essaierais:

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

4

Lors de la configuration avec JQM, n'oubliez pas de mettre à jour UI:

$('#selectId').val('newValue').selectmenu('refresh', true);

Merci pour ce pépite - je me demandais pourquoi la nouvelle valeur n'apparaît pas à l'écran après avoir changé le selectedIndex avec $ ("# slot-choice"). Prop ("selectedIndex", n).
Samik R

3

$("#myId").val()devrait fonctionner si myidl'ID d'élément select!

Cela définirait l'élément sélectionné: $("#myId").val('VALUE');


1

Supposons que vous ayez créé une liste déroulante en utilisant la balise SELECT comme suit,

<select id="Country">

Maintenant, si vous voulez voir quelle est la valeur sélectionnée dans la liste déroulante à l'aide de JQuery, mettez simplement la ligne suivante pour récupérer cette valeur.

var result= $("#Country option:selected").text();

cela fonctionnera très bien.


0

Je sais que c'est vieux, mais je viens de passer un bon moment avec Razor, je ne pouvais pas le faire fonctionner, peu importe mes efforts. Continué à revenir comme "indéfini", peu importe si j'ai utilisé "texte" ou "html" pour l'attribut. Enfin, j'ai ajouté l'attribut "data-value" à l'option et je l'ai lu très bien.

 <option value="1" data-value="MyText">MyText</option>

 var DisplayText = $(this).find("option:selected").attr("data-value");

0

$ ("Option #myId: sélectionnée") .text (); vous donnera le texte que vous avez sélectionné dans l'élément déroulant. de toute façon, vous pouvez le changer en .val (); pour en avoir la valeur. vérifiez le codage ci-dessous

<select id="myId">
    <option value="1">Mr</option>
    <option value="2">Mrs</option>
    <option value="3">Ms</option>`
    <option value="4">Dr</option>
    <option value="5">Prof</option>
</select>

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.