Comment sélectionner une option particulière dans un élément SELECT de jQuery?

si vous connaissez L'Index, la valeur ou le texte. aussi, si vous n'avez pas d'IDENTIFIANT pour une référence directe.

Ce , ce et ce sont tous des réponses utiles.

exemple de balisage

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>
606
demandé sur Community 2008-11-24 19:18:19

19 réponses

un sélecteur pour obtenir l'option du milieu-élément par la valeur est

$('.selDiv option[value="SEL1"]')

pour un indice:

$('.selDiv option:eq(1)')

pour un texte connu:

$('.selDiv option:contains("Selection 1")')

EDIT : comme commenté ci-dessus L'OP pourrait avoir été après avoir changé l'élément sélectionné de la liste déroulante. Dans la version 1.6 et plus, la méthode prop() est recommandée:

$('.selDiv option:eq(1)').prop('selected', true)

dans les versions plus anciennes:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : d'après le commentaire de Ryan. Un match sur "Sélection 10" pourrait être indésirable. J'ai trouvé aucun sélecteur pour correspondre au texte complet, mais un filtre fonctionne:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : faites attention avec $(e).text() car il peut contenir une nouvelle ligne faisant la comparaison échec. Cela se produit lorsque les options sont implicitement fermées (pas d'étiquette </option> ):

<select ...>
<option value="1">Selection 1
<option value="2'>Selection 2
   :

si vous utilisez simplement e.text n'importe quel espace supplémentaire comme la nouvelle ligne arrière sera enlevé, ce qui rend la comparaison plus robuste.

1056
répondu Grastveit 2018-07-16 06:31:37

aucune des méthodes ci-dessus n'a fourni la solution dont j'avais besoin alors j'ai pensé que je fournirais ce qui a fonctionné pour moi.

$('#element option[value="no"]').attr("selected", "selected");
105
répondu user1074546 2011-12-01 02:25:34

vous pouvez juste utiliser val() méthode:

$('select').val('the_value');
69
répondu Leandro Ardissone 2009-12-02 19:49:50

en valeur, ce qui a fonctionné pour moi avec jQuery 1.7 était le code ci-dessous, essayez ceci:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
44
répondu mpoletto 2014-09-10 22:47:59

vous pouvez nommer le select et utiliser ceci:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

il doit sélectionner l'option que vous voulez.

12
répondu Sandro 2012-02-01 21:02:15

il y a plusieurs façons de faire cela, mais l'approche la plus propre a été perdue parmi les meilleures réponses et les charges d'arguments au cours de val() . Aussi certaines méthodes changé de jQuery 1.6, donc cela nécessite une mise à jour.

pour les exemples suivants, je supposerai que la variable $select est un objet jQuery pointant vers l'étiquette <select> désirée, p.ex. par l'intermédiaire de ce qui suit:

var $select = $('.selDiv .opts');

Note 1-utiliser val () pour les correspondances de valeurs:

pour l'appariement des valeurs, utiliser val() est beaucoup plus simple que d'utiliser un sélecteur d'attribut: https://jsfiddle.net/yz7tu49b/6 /

$select.val("SEL2");

la version de setter de .val() est implémentée sur select tags en définissant la propriété selected d'une correspondance option avec le même value , fonctionne donc très bien sur tous les navigateurs modernes.

Note 2 - prop('selected', vrai):

si vous voulez définir l'état sélectionné d'une option directement, Vous pouvez utiliser prop (pas attr ) avec un paramètre boolean (plutôt que la valeur texte selected ):

p.ex. https://jsfiddle.net/yz7tu49b /

$option.prop('selected', true);  // Will add selected="selected" to the tag

Note 3-tenir compte des valeurs inconnues:

Si vous utilisez val() pour sélectionner un <option> , mais val n'est pas corresponded (peut se produire selon la source des valeurs), puis "nothing" est sélectionné et $select.val() retournera null .

donc, pour l'exemple montré, et par souci de Robustesse, vous pourriez utiliser quelque chose comme ceci https://jsfiddle.net/1250Ldqn / :

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}

Note 4-correspondance exacte du texte:

Si vous voulez correspondre par le texte exact, vous pouvez utiliser un filter avec la fonction. par exemple https://jsfiddle.net/yz7tu49b/2 / :

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

bien que si vous pouvez avoir des espaces supplémentaires vous pouvez vouloir ajouter une garniture à la vérification comme dans

    return $.trim(this.text) == "some value to match";

Note 5 - match par l'indice

si vous voulez faire correspondre par index il suffit d'indexer les enfants du select par exemple https://jsfiddle.net/yz7tu49b/3 /

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

bien que j'ai tendance à éviter les propriétés DOM directes en faveur de jQuery de nos jours, au code de l'épreuve du futur, de sorte que pourrait également être fait comme https://jsfiddle.net/yz7tu49b/5 / :

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

Note 6-Utiliser le changement () pour lancer la nouvelle sélection

dans tous les cas ci-dessus, l'événement de changement ne se déclenche pas. Ceci est fait de manière à ce que vous ne vous retrouviez pas avec des événements de changement récursifs.

Pour générer l'événement de changement, si nécessaire, il suffit d'ajouter un appel à .change() à l'objet jQuery select . par exemple, le premier exemple le plus simple devient https://jsfiddle.net/yz7tu49b/7 /

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

il y a aussi beaucoup d'autres façons de trouver les éléments en utilisant des sélecteurs d'attributs, comme [value="SEL2"] , mais vous devez vous rappeler que les sélecteurs d'attributs sont relativement lents par rapport à toutes ces autres options.

11
répondu Gone Coding 2016-09-06 12:13:09
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");
10
répondu João Paulo Oliveira 2014-12-16 18:17:00

répondant à ma propre question pour la documentation. Je suis sûr qu'il y a d'autres façons d'accomplir ceci, mais cela fonctionne et ce code est testé.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>
9
répondu Jay Corbett 2008-11-24 16:19:40

en utilisant jquery-2.1.4 , j'ai trouvé la réponse suivante à travailler pour moi:

$('#MySelectionBox').val(123).change();

si vous avez une valeur string essayez ce qui suit:

$('#MySelectionBox').val("extra thing").change();

D'autres exemples n'ont pas fonctionné pour moi, c'est pourquoi j'ajoute cette réponse.

j'ai trouvé la réponse originale à: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu

7
répondu raddevus 2016-01-05 14:58:54

j'utilise ceci, quand je connais l'index de la liste.

$("#yourlist :nth(1)").prop("selected","selected").change();

cela permet à la liste de changer, et de lancer l'événement de changement. Le": nth(n) "est calculé à partir de l'indice 0

6
répondu Miguel 2013-10-11 13:47:34

je vais dire: -

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
5
répondu user2606817 2013-08-14 08:22:57

pour définir la valeur select avec déclenchement sélectionné:

$('select.opts').val('SEL1').change();

Pour l'option de réglage de la portée:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

ce code utilise selector pour trouver l'objet select avec condition, puis changer l'attribut sélectionné par attr() .


Plus loin, je vous recommande d'ajouter change() événement après la définition de l'attribut selected , en faisant cela, le code sera près à l'évolution de la sélectionner par l'utilisateur.

4
répondu Nick Tsai 2017-06-22 04:44:22

pour Jquery choisi si vous envoyez l'attribut à la fonction et besoin de mise à jour-Sélectionner l'option

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
3
répondu Andrej BlackFlash 2013-03-01 14:11:57
/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() {
        $("#gate option[value='']").prop('selected', true);
    });
    </script>
3
répondu Pratik Kamani 2016-05-30 06:49:20

Essayez cette

vous n'utilisez que select field id au lieu de #id (c.-à-d.# select_name)

au lieu de valeur de l'option utilisez l'option valeur

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>
3
répondu perumal N 2017-09-22 18:27:57

le $('select').val('the_value'); semble la bonne solution et si vous avez des lignes de table de données alors:

$row.find('#component').val('All');
1
répondu Jitesh Sojitra 2015-12-14 13:36:26

si vous ne voulez pas utiliser jQuery, vous pouvez utiliser le code ci-dessous:

document.getElementById("mySelect").selectedIndex = "2";
1
répondu FLICKER 2016-02-04 02:06:03

Merci pour la question. J'espère que ce code fonctionnera pour vous.

var val = $("select.opts:visible option:selected ").val();
1
répondu Md. Russel Hussain 2016-10-23 04:12:15

essayez ce nouveau

Exactement ça fonctionne

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>
0
répondu perumal N 2018-02-17 05:04:54